列表< T> :: iterator或语法错误?

时间:2012-04-23 16:55:13

标签: c++

我目前收到以下编译错误:

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;

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

我觉得很粗鲁,因为我觉得我基本上要求别人检查我的语法,我一直在阅读它,并且认为我必须在某处或某处遗漏冒号,但我只是看不出问题是什么!一个新的眼睛将不胜感激!我感谢您可能需要更多代码(我可以提供),但就像我说的那样,如果这些内容已经注释完成,那么我认为新代码应该是。

3 个答案:

答案 0 :(得分:3)

请勿调用变量list

答案 1 :(得分:3)

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

list< HighScorePair> list;

list是指您使用using namespace std;进入全局范围的符号,并且在该行之后,直到块的结尾,它 指的是您刚才在此定义的变量。变量是 模板,其类型不支持<,因此list <不是{\ n} 合法的。

作为一般规则,我建议不要隐藏名称。它导致 混乱。另外:类型名称应该是不合格的名词(如list), 变量名称应该是限定名词(如currentList)。至少 原则上;我可以看到这样一条规则过度的情况。

答案 2 :(得分:1)

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