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;

我留下了一些注释掉的文本,我以前用来测试某些东西,因为我确信注释掉的文本可以完美地工作,如果它有效,我不明白为什么我添加的新代码不起作用,我'我没有使用任何新的类或任何东西,我只是试图获得一个迭代器设置。

我觉得很粗鲁,因为我认为我基本上是在要求某人检查我的语法,我一直在阅读它并认为我一定是在某处遗漏了冒号或其他东西,但我就是看不出问题所在!一个新的眼睛将不胜感激!我很感激您可能想要更多代码(我可以提供),但是就像我说的那样,如果注释掉的东西有效,那么我认为新代码应该可以。

4

3 回答 3

3

不要调用你的变量list

于 2012-04-23T16:56:53.460 回答
3

首先,我假设你有一个using namespace std;地方;这通常不是一个好主意。但是基本问题仍然存在(尽管不是 for list,因为您会编写 `std::list):您已经定义了一个与更大范围内的符号同名的局部变量;局部变量从其声明点隐藏该符号,直到它超出范围。所以直到这一行:

list< HighScorePair> list;

,list指的是你用 拉入全局范围的符号using namespace std;,在那一行之后,直到块的末尾,它指的是你刚刚在此处定义的变量。该变量 不是模板,其类型不支持<,因此list <不合法。

As a general rule, I would recommend against hiding names. It leads to confusion. Also: type names should be unqualified nouns (like list), variable names should be qualified nouns (like currentList). At least in principle; I can see cases where such a rule would be overkill.

于 2012-04-23T17:06:00.097 回答
1

猜猜你写了using namespace std;当你调用与 std:: 中的函数关联的变量时,它会抛出编译错误。定义变量( std::list )时只需使用确切的命名空间。

于 2012-04-23T16:58:55.040 回答