使用 std::vector<std::string> myString 时出错

Error Using std::vector<std::string> myString

本文关键字:std myString 出错 gt lt vector 使用 string      更新时间:2023-10-16

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

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

我正在使用std::vector<std::string>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++生成器 2010。

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

std::getline的第二个参数可以是std::string,但不能std::vector<std::string>。正如错误消息所示,这很清楚。

更新

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

自:

std::string mystring;

不发布你如何声明myline,我想这是std::vector<std::string>.

比尔兹和托米纠正了你传递错误的论点,所以我改变了你的代码。

应该是
    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();
    }

你把错误的参数传递给getline

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

另外,线

myline.push_back(mystring)

不起作用,因为myline可能是字符串的向量,并且您尝试将vector<string>元素推送到它。

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