没有 "getline" 的实例匹配参数列表
no instance of "getline" matches the argument list
我正在使用 GeeksForGeeks ReadCSV 函数读取 CSV 文件,我原封不动地复制了代码,但出现此错误:“没有实例” getline“匹配参数列表”谁能告诉我为什么会这样?
完整代码如下:
void ReadCSV(std::string filename, std::vector<RowVector*>& data)
{
data.clear();
std::ifstream file(filename);
std::string line, word;
// determine number of columns in file
getline(file, line, '\n');
std::stringstream ss(line);
std::vector<Scalar> parsed_vec;
while (getline(ss, word, ', ')) {
parsed_vec.push_back(Scalar(std::stof(&word[0])));
}
uint cols = parsed_vec.size();
data.push_back(new RowVector(cols));
for (uint i = 0; i < cols; i++) {
data.back()->coeffRef(1, i) = parsed_vec[i];
}
// read the file
if (file.is_open()) {
while (getline(file, line, '\n')) {
std::stringstream ss(line);
data.push_back(new RowVector(1, cols));
uint i = 0;
while (getline(ss, word, ', ')) {
data.back()->coeffRef(i) = Scalar(std::stof(&word[0]));
i++;
}
}
}
}
getline
的第三个参数是单个字符(见下文)。当你传递它时 ', '
你试图用单引号传递两个字符。
https://www.cplusplus.com/reference/string/string/getline/
istream& getline (istream& is, string& str, char delim);
将分隔符更改为 ','
(单个字符),应该没问题。
如果您对单引号和双引号感兴趣,以及当您将多个字符放在单引号中时会发生什么,下面的 post 有一些很好的讨论。
(Single quotes vs. double quotes in C or C++)
我正在使用 GeeksForGeeks ReadCSV 函数读取 CSV 文件,我原封不动地复制了代码,但出现此错误:“没有实例” getline“匹配参数列表”谁能告诉我为什么会这样?
完整代码如下:
void ReadCSV(std::string filename, std::vector<RowVector*>& data)
{
data.clear();
std::ifstream file(filename);
std::string line, word;
// determine number of columns in file
getline(file, line, '\n');
std::stringstream ss(line);
std::vector<Scalar> parsed_vec;
while (getline(ss, word, ', ')) {
parsed_vec.push_back(Scalar(std::stof(&word[0])));
}
uint cols = parsed_vec.size();
data.push_back(new RowVector(cols));
for (uint i = 0; i < cols; i++) {
data.back()->coeffRef(1, i) = parsed_vec[i];
}
// read the file
if (file.is_open()) {
while (getline(file, line, '\n')) {
std::stringstream ss(line);
data.push_back(new RowVector(1, cols));
uint i = 0;
while (getline(ss, word, ', ')) {
data.back()->coeffRef(i) = Scalar(std::stof(&word[0]));
i++;
}
}
}
}
getline
的第三个参数是单个字符(见下文)。当你传递它时 ', '
你试图用单引号传递两个字符。
https://www.cplusplus.com/reference/string/string/getline/
istream& getline (istream& is, string& str, char delim);
将分隔符更改为 ','
(单个字符),应该没问题。
如果您对单引号和双引号感兴趣,以及当您将多个字符放在单引号中时会发生什么,下面的 post 有一些很好的讨论。 (Single quotes vs. double quotes in C or C++)