皆さんに助けを求める前に、これを調査するのに 1 時間以上を費やしました。Visual Studio 2012 を使用しており、アップデート 2 をインストールしました。
私はこのコンストラクタを持っています
Lexer::Lexer(istream &source1, ostream& listing1)
:source(source1), listing(listing1)
{
vector<string> tempVec = {
"and", "begin", "boolean", "break", "call", "end", "else", "false", "halt",
"if", "input", "integer", "is", "loop", "not", "null", "newline", "or", "output", "procedure"
"return", "then", "true", "var"
};
tokenToStringVector = tempVec;
for (int k= 0; k < tokenToStringVector.size(); k++)
{
string key = tokenToStringVector[k];
lexemeToTokenMap[key] = Token(k); // Function-style type cast
}
}
私の教授がヘッダーを書き、私がコードを書きました。私は理解できないこのエラーが発生しています:
1>c:\users\sam\dropbox\compiler project\lexical analyzer\lexer.cpp(8): error C2552: 'tempVec' : non-aggregates cannot be initialized with initializer list
1> 'std::vector<_Ty>' : Types with a base are not aggregate
1> with
1> [
1> _Ty=std::string
1> ]
このように初期化できない理由がわかりません。配列を作成してからループをベクターに追加することもできますが、既にベクターを使用してマップを作成しているだけなので、これを行うにはもっと論理的な方法が必要です。
ありがとうございます!みなさま、いつも大変お世話になっております!
注意してください: 答えが単純なフォーマット エラーでない場合は、コードを修正せずに、正しい方向に向けてください。これは段階的な課題であり、私は正直な学生であり、自分で学びたいと思っています。
OK、返信と、誰かが投稿したSO投稿を再読することから。
- C++ 2011 では有効ですが、Visual Studio ではこれをサポートしていません。
みんなありがとう、私は配列を作成する必要があると思います。
私の教授は、これと同じようにするように私に言いました。彼はこれをサポートする Linux gcc コンパイラを使用しています。
編集: わかりました。Microsoft には、これをサポートするアルファ版があります。配列を作成して転送するだけだと思います。
助けてくれてありがとう!!!!