这是我的错误代码:
错误:'class __gnu_debug_def :: vector,std :: allocator>,std :: allocator,std :: allocator> > > :: std'尚未声明 由于-Wfatal-errors而导致编译终止。
此代码只是我用来产生相同错误的通用代码,但我的原始代码正在尝试执行strings::vector::at(i)
操作:
#include <iostream>
int main(){
std::vector<std::string> strings;
std::string string;
std::stringstream range1d;
range1d.str( "Hello0,Hello1,Hello2,Hello3,Hello4,Hello5");
while(std::getline(range1d,string,',')) {
strings.push_back(string);
}
for(std::vector<std::string>::const_iterator i = strings.begin(); i != strings.end() ; ++i) {
cout << "at: " << strings.std::vector::at(i) << endl ;
}
return 0;
}
我对C ++很新,虽然给出了错误代码,但我真的不知道如何解决这个问题。谷歌搜索了一段时间。我发现了一些关于声明typename或者其他东西的东西,但我无法应用它以使它有意义。 感谢您的帮助
答案 0 :(得分:5)
i
是一个迭代器,获取值所需的只是取消引用它。
std::cout << "at: " << *i << std::endl;
at
成员函数采用索引。也就是说,一个整数表示所需元素所在的向量中的位置。您可以在看起来像这样的循环中使用它:
for (unsigned int i = 0; i<strings.size(); ++i)
{
std::cout << "at: " << strings.at(i) << std::endl;
}
此外,您需要为您使用的所有工具添加相应的标头,即<vector>
,<sstream>
和<string>
。您还需要在cout
命名空间中限定endl
和std
。