没有“getline”实例与参数列表匹配

问题描述

我正在使用 GeeksForGeeks ReadCSV 函数来读取 CSV 文件,我完全按原样复制了代码,但出现此错误:“没有“getline”实例与参数匹配list”谁能告诉我为什么会这样?

完整代码如下:

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,'\n')) {
            std::stringstream ss(line);
            data.push_back(new RowVector(1,cols));
            uint i = 0;
            while (getline(ss,')) {
                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);

将您的分隔符更改为仅 ','(单个字符),您应该没问题。

如果您对单引号和双引号感兴趣,以及当您在单引号中放置多个字符时会发生什么,以下帖子有一些很好的讨论。 (Single quotes vs. double quotes in C or C++)