Расширенные списки инициализаторов, доступные только с
Я очень новичок в С++, и у меня возникли проблемы с чтением моих ошибок. Я смог устранить большинство из них, но я добрался до нескольких, и я прошу помочь им.
Вот программа
#include <string>
#include <iostream>
using namespace std;
int main(){
int *bN = new int[9];
string bankNum;
int *number = new int[9];
int total, remain;
int *multi = new int{7,3,9,7,3,9,7,3};
cout<<"Please enter the bank number located at the bottom of the check"<<endl;
cin>>bankNum;
for(int i = 0; i < 8; i++){
bN[i]= (bankNum[i]-48);
}
for(int i = 0; i < 8;i++){
cout<<bN[i];
}
cout<<endl;
for(int i = 0; i < 8;i++){
cout<<multi[i];
}
cout<<endl;
for(int i = 0; i < 8;i++){
bN[i] = bN[i] * multi[i];
cout<< bN[i];
}
cout<<endl;
for(int i = 0; i < 8;i++){
total += bN[i]
cout<<total;
}
cout<<endl;
remain = total % 10;
if(remain == (bankNum[9] - 48)){
cout<<"The Number is valad"<<endl;
cout<<remain<<endl;
}
}
и ошибки
[email protected]:~$ c++ bankNum.cpp
bankNum.cpp: In function âint main()â:
bankNum.cpp:9:19: warning: extended initializer lists only available with -std=c++0x or -std=gnu++0x [enabled by default]
bankNum.cpp:9:38: error: cannot convert â<brace-enclosed initializer list>â to âintâ in initialization
bankNum.cpp:30:3: error: expected â;â before âcoutâ
Ответы
Ответ 1
Этот стиль инициализации, используя фигурные скобки:
int *multi = new int{7,3,9,7,3,9,7,3};
был представлен на языке в 2011 году. Старые компиляторы его не поддерживают; некоторые более новые (например, ваши) поддерживают его только в том случае, если вы скажете им; для вашего компилятора:
c++ -std=c++0x bankNum.cpp
Однако эта форма инициализации все еще недействительна для массивов, созданных с помощью new
. Поскольку он мал и используется только локально, вы можете объявить локальный массив; для этого не требуется поддержка С++ 11:
int multi[] = {7,3,9,7,3,9,7,3};
Это также имеет преимущество в устранении утечки памяти - если вы используете new
для выделения памяти, тогда вы должны освободить ее с помощью delete
, когда вы закончите с ней.
Если вам понадобилось динамическое размещение, вы должны использовать std::vector
для выделения и освобождения памяти для вас:
std::vector<int> multi {7,3,9,7,3,9,7,3};
Остерегайтесь того, что ваша версия GCC довольно старая и имеет неполную поддержку для С++ 11.