void catchlabel()
{
if(vecs.empty())
return;
else
{
cout << "The Sizeof the Vector is: " << vecs.size() << endl;
cout << "Currently Stored Labels: " << endl;
/* Error 1 */
for ( int i = 1, vector<string>::iterator it = vecs.begin(); it != vecs.end(); ++it , i++)
cout << i << ". "<< *it << endl;
cout << endl;
}
}
我收到以下错误:
1&GT;错误C2146:语法错误:在标识符'it'
之前缺少','如何解决这个问题?
答案 0 :(得分:8)
您不能在for
循环的初始语句中声明多个类型的项,就像您不能将int i = 1, vector<string>::iterator it = vecs.begin();
视为独立语句一样。你必须在循环之外声明其中一个。
由于C语言你从来没有能够在一个语句中声明不同类型的多个变量(虽然指针是一个相当奇怪的例外):
int i, double d; /* Invalid */
int i, j; /* Valid */
此行为由C ++继承,并适用于for
循环中的每个语句以及独立语句。
答案 1 :(得分:1)
您的for
循环错误。您不能在for
的初始化部分声明不同类型的变量!
这样做:
int i = 1;
for (vector<string>::iterator it = vecs.begin(); it != vecs.end(); ++it , i++)
{
cout << i << ". "<< *it << endl;
}
或许,你会喜欢这个:
for (size_t i = 0 ; i < vecs.size(); ++i )
{
cout << (i+1) << ". "<< vecs[i] << endl;
}
答案 2 :(得分:1)
您不能在for循环的“init”部分声明两种不同类型的变量。将“i”(或“it”)的声明移到循环外部。
答案 3 :(得分:1)
你可以使用好的技巧不让你的迭代器超出范围:
void catchlabel()
{
if(vecs.empty())
return;
else
{
cout << "The Sizeof the Vector is: " << vecs.size() << endl;
cout << "Currently Stored Labels: " << endl;
/* Error 1 */
{
vector<string>::iterator it = vecs.begin()
for ( int i = 1; it != vecs.end(); ++it , i++)
cout << i << ". "<< *it << endl;
cout << endl;
}
}
}
我会说,如果你需要操作这两个元素及其索引,那么在'for'循环中使用索引更简单,而不是迭代器。
答案 4 :(得分:1)
您无需专门计算元素,您可以随时计算vecs.begin()
的距离:
void catchlabel()
{
if(!vecs.empty())
{
cout << "The Sizeof the Vector is: " << vecs.size() << endl;
cout << "Currently Stored Labels: " << endl;
for (vector<string>::iterator it = vecs.begin(); it != vecs.end(); ++it)
cout << (it - vecs.begin() + 1) << ". "<< *it << endl;
cout << endl;
}
}