我在尝试访问vector <string>元素时遇到错误,文本中的信息</string>

时间:2013-08-14 16:28:24

标签: c++ string vector

这是我的错误代码:

  

错误:'class __gnu_debug_def :: vector,std :: allocator&gt;,std :: allocator,std :: allocator&gt; &GT; &gt; :: 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或者其他东西的东西,但我无法应用它以使它有意义。 感谢您的帮助

1 个答案:

答案 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命名空间中限定endlstd