1. ホーム
  2. c++

[解決済み】拡張イニシャライザーリストは、以下の場合のみ利用可能です。

2022-02-01 04:58:40

質問内容

私はC++の初心者です。私は自分のエラーを読むのに苦労しています。

以下はプログラムです。

#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;
 }
}

とエラー

wm018@cs:~$ 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â

解決方法は?

中括弧を使ったこのスタイルの初期化。

int *multi = new int{7,3,9,7,3,9,7,3};

は2011年に導入された言語です。古いコンパイラはこれをサポートしていません。新しいコンパイラの中には、あなたがコンパイラに指示した場合のみサポートするものがあります。

c++ -std=c++0x bankNum.cpp

しかし、このような初期化は new . これは小さく、ローカルにしか使われないので、ローカル配列を宣言することができます。これは、C++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のバージョンはかなり古く、C++11のサポートが不完全であることに注意してください。