1

現在、次のコンパイル エラーが発生しています。

In function 'int main()':
error: expected primary-expression before '>' token
error: missing template arguments before 'i'
error: expected ';' before 'i'
error: 'i' was not declared in this scope

以下のコード ブロックで、最初のエラー フラグの行を強調表示しました。

// test highscoresfilemanager reading & writing
/*
HighScorePair paira("holly", 10);
HighScorePair pairb("carl", 20);
*/
list< HighScorePair > list;
//list.push_back(paira); list.push_back(pairb);
HighScoresFileManager::GetInstance()->ReadFileToList(list);
list< HighScorePair >::iterator i; //ERROR FLAGS HERE ODDLY
for(i = list.begin(); i != list.end(); ++i)
   std::cout << (*i).playerName << " " << (*i).playerScore << std::endl;

以前に何かをテストするために使用していたコメント アウトされたテキストを残しました。コメント アウトされたテキストが完全に機能することは確かであり、それが機能する場合、追加した新しいコードが機能しない理由がわからないからです。 m 新しいクラスなどを使用していないので、イテレータのセットアップを取得しようとしました。

私は基本的に誰かに私の構文をチェックするように頼んでいると思うので、かなり失礼に感じます. 新しい目は大歓迎です!より多くのコード (私が提供できるもの) が必要になるかもしれませんが、私が言ったように、コメントアウトされたものが機能する場合は、新しいコードが必要だと思います。

4

3 に答える 3

3

まず、using namespace std;どこかにあると思います。それは一般的に良い考えではありません。しかし、基本的な問題は残ります ( list`std::list と書くので、. ローカル変数は、そのシンボルを宣言の時点からスコープ外に出るまで非表示にします。したがって、次の行まで:

list< HighScorePair> list;

、 でlistグローバルスコープにプルしたシンボルを参照し、using namespace std;その行の後、ブロックの最後まで、ここで定義した変数を参照します。変数は テンプレートではなく<、その型は をサポートしていないため、list <有効ではありません。

原則として、名前を非表示にすることはお勧めしません。それは混乱につながります。また、型名は修飾されていない名詞 ( などlist) であり、変数名は修飾された名詞 ( などcurrentList) である必要があります。少なくとも原則として。そのようなルールがやり過ぎになるケースも見られます。

于 2012-04-23T17:06:00.097 に答える
3

variable を呼び出さないでくださいlist

于 2012-04-23T16:56:53.460 に答える
1

using namespace std;std ::の関数に関連付けられている変数を呼び出すと、コンパイルエラーがスローされます。変数を定義するときは、正確な名前空間を使用してください(std :: list)。

于 2012-04-23T16:58:55.040 に答える