从有效文件读取时没有匹配的函数来调用错误

时间:2014-07-04 18:23:12

标签: c++ filestream

我在文件中有以下数据:

0001 O 100 102.30
0001 O 101 333.22
0001 O 102 679.13
0001 P 103 513.36
0001 P 104 700.94

使用以下代码:

vector<string> customerID;
vector<char> transactionType;
vector<string> transactionNumber;
vector<double> amount;

string cID, tT, tN, amnt;

for(;infile2 >> cID >> tT >> tN >> amnt;){
    customerID.push_back(cID);
    transactionType.push_back(tT);
    transactionNumber.push_back(tN);
    amount.push_back(amnt);
}

和错误:

error: no matching function for call to 'std::vector<char>::push_back(std::string&)'
error: no matching function for call to 'std::vector<double>::push_back(std::string&)'

是否假设每个数据项都是字符串? 我该如何解决这个问题?

2 个答案:

答案 0 :(得分:1)

如上所述,您在阅读时使用了四个string变量。您可以通过声明相应类型的变量来更正它。

vector<string> customerID;
vector<char> transactionType;
vector<string> transactionNumber;
vector<double> amount;

string cID, tN;
char tT;
double amnt;

for(;infile2 >> cID >> tT >> tN >> amnt;){
    customerID.push_back(cID);
    transactionType.push_back(tT);
    transactionNumber.push_back(tN);
    amount.push_back(amnt);
}

答案 1 :(得分:1)

是的,确实如此。您正在阅读四个字符串,并且您正在将其中任何字符串转换为其他内容。 C ++没有提供从std::string到非字符串类型的隐式转换。

解决问题的最简单方法是将tTamnt作为chardouble阅读。只需将变量声明为

即可
std::string cID, tN;
char tT;
double amnt;

它应该有效。或者,您可以将它们作为字符串读取并转换它们。