您好我很难理解编译器的内容
[BCC32错误] frmNew.cpp(333):E2285找不到匹配' std :: getline< _Elem,_Traits,_Alloc>(ifstream,std :: vector>)' 完整的解析器上下文 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 ++ builder 2010
在许多教程中,他们更喜欢使用std :: vector将字符串存储到动态数组中。 所以我也采取了同样的方式,但是当我尝试使用 std :: vector&lt;&gt;
时答案 0 :(得分:3)
std::getline
的第二个参数可能是std::string
,但不是std::vector<std::string>
。错误消息显示非常清楚。
更新
std::vector<std::string> mystring(tempIndexAwal);
为:
std::string mystring;
您不会发布myline
声明的方式,我认为它是std::vector<std::string>
。
答案 1 :(得分:1)
你向getline
传递错误的论点。
mystring
不应该是std::string
,而是std::vector
。这样一线
std::getline(ifs_Awal,mystring)
导致错误,因为第二个参数不是std::string
。
另外,行
myline.push_back(mystring)
不起作用,因为myline
可能是字符串的向量,并且您尝试将vector<string>
的元素推送到它。
因此,正如已建议的那样,将myline
更改为std::string
就是答案。
答案 2 :(得分:1)
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();
}