错误使用 std::vector<std::string> myString

Posted

技术标签:

【中文标题】错误使用 std::vector<std::string> myString【英文标题】:Error Using std::vector<std::string> myString 【发布时间】:2013-10-06 09:17:57 【问题描述】:

嗨,我有点难以理解编译器在说什么:

[BCC32 错误] frmNew.cpp(333): E2285 找不到匹配 'std::getline<_elem>(ifstream,std::vectorstd::string,std::allocator)' 完整的解析器上下文 frmNew.cpp(303): 解析: void _fastcall TFrmNewPeta::showDefaultRute()

我使用std::vector&lt;std::string&gt;mystring 来存储我的字符串文件,但是 while (std::getline(ifs_Awal, mystring)) 抛出错误。

这是我的完整代码:

    void __fastcall TFrmNewPeta::showDefaultRute()
    
        std::string mystring;
        std::ifstream ifs_Awal;
        int tempIndexAwal = 0;
        ifs_Awal.open("DefaultDataAwal");
        while (std::getline(ifs_Awal, mystring)) ++tempIndexAwal;
        std::vector<std::string> mystring(tempIndexAwal);
        while (std::getline(ifs_Awal, mystring)) // error
        
            mystring.push_back(mystring); // error
        
        ifs_Awal.close();
    

我正在使用 C++ Builder 2010。

在许多教程中,他们更喜欢使用std::vector 将字符串存储到动态数组中。所以我做了同样的事情,但是当我尝试使用std::vector&lt;&gt;时出现错误。

【问题讨论】:

【参考方案1】:

std::getline 的第二个参数可以是std::string,但不是std::vector&lt;std::string&gt;。错误信息显示的很清楚。

更新

std::vector<std::string> mystring(tempIndexAwal);

到:

std::string mystring;

你没有发布你如何声明myline,我想它是std::vector&lt;std::string&gt;

【讨论】:

@BikaShad 很高兴,很高兴它有帮助!【参考方案2】:

billz 和 tomi 纠正了您传递的错误参数,因此我更改了您的代码。应该是

    void __fastcall TFrmNewPeta::showDefaultRute() 
    std::string lines;
    std::ifstream ifs_Awal;
    int tempIndexAwal = 0;
    ifs_Awal.open("DefaultDataAwal");

    /*get the strings and counting the lines*/
    while(std::getline(ifs_Awal,lines))++tempIndexAwal;

    std::vector<std::string> mystring(tempIndexAwal);

    while(std::getline(ifs_Awal,lines)) //put your 'lines' here
    
        mystring.push_back(lines); // theres no error again :)
    
    ifs_Awal.close();
    

【讨论】:

感谢您将我的代码更改为正确答案。我一直在做和你回答一样的事情。谢谢 如果您愿意,我很高兴。您也可以使用向量at() 的成员函数来显示元素。例如std::cout&lt;&lt;mystring.at(0)&lt;&lt;endl;【参考方案3】:

您将错误的参数传递给getline

mystring 不是应有的std::string,而是std::vector。因此线 std::getline(ifs_Awal,mystring) 导致错误,因为第二个参数不是 std::string

还有,行

myline.push_back(mystring)

不起作用,因为myline 可能是字符串向量,而您尝试将vector&lt;string&gt; 的元素推送到它。

因此,正如已经建议的那样,将myline 更改为std::string 就是答案。

【讨论】:

嗨@Tomi.lee.jones,我意识到我错误地声明使用 mystring 作为字符串作为向量。所以我按照您的建议更改了我的代码及其工作原理,谢谢您的建议

以上是关于错误使用 std::vector<std::string> myString的主要内容,如果未能解决你的问题,请参考以下文章

使用 std::count_if() 时出现错误“没有从 'std::vector<double, std::allocator<double> >' 到 'double *'

std::vector<std::pair<int, float>> 和 void 错误

使用 std::vector 链接错误

运行时错误:引用绑定到“std::vector<int, std::allocator<int>>”类型的空指针 (stl_vector.h)

运行时错误:引用绑定到“std::vector<int, std::allocator<int> >”类型的空指针 (stl_vector.h)

这是 std::vector 和 std::shared_ptr 内存泄漏的错误吗?