Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/149.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ getline()来自文本文件错误_C++_Text_Getline - Fatal编程技术网

C++ getline()来自文本文件错误

C++ getline()来自文本文件错误,c++,text,getline,C++,Text,Getline,对于学校的实验室,我试图从文本文件中获取行并显示它们 我的开始: #include <iostream> #include <iomanip> #include <string> #include <vector> #include <playlist.h> using namespace std; void readLine(vector<string> playlist); int totalTime(); void

对于学校的实验室,我试图从文本文件中获取行并显示它们

我的开始:

#include <iostream>
#include <iomanip>
#include <string>
#include <vector>
#include <playlist.h>

using namespace std;

void readLine(vector<string> playlist);
int totalTime();
void displayData();

int main()
{
    vector<string> playlist;

    readLine(playlist);
    totalTime();
    displayData();

    system("pause");

    return 0;
}
void readLine(vector<string> playlist)
{
    string currentline;
    int i = 0;
    while (getline("Playlist.txt", currentline) && !empty(currentline))
    {
        getline("Playlist.txt", playlist[i]);
        i = i + 1;
    }
}
int totalTime() 
{

}
void displayData()
{

}
#包括
#包括
#包括
#包括
#包括
使用名称空间std;
void readLine(矢量播放列表);
整数totalTime();
void displayData();
int main()
{
矢量播放列表;
读线(播放列表);
总时间();
显示数据();
系统(“暂停”);
返回0;
}
无效读线(矢量播放列表)
{
串电流线;
int i=0;
while(getline(“Playlist.txt”,currentline)和&!empty(currentline))
{
getline(“Playlist.txt”,Playlist[i]);
i=i+1;
}
}
整数总时间()
{
}
void displayData()
{
}
看来我误用了getline?两个“getline”有错误下划线,表示:

getline

错误:没有重载函数“getline”的实例与 参数列表参数类型有:(const char[13],std::string)


我不知道错误的原因。

您没有缺少
getline
函数,您使用的是错误的

getline
需要一个
std::istream&
和一个
std::string&
。您需要打开文件的
std::ifstream
,并将此流作为第一个参数传递

请看这里:

修改
readLine()
函数,可以将
播放列表
作为参考传递,也可以返回
播放列表
向量并将其移动到另一个向量中,因为除非您执行从代码中排除的操作,否则
播放列表
向量将丢失

vector<string> readLine(vector<string> playlist)
{
    ifstream fin;
    fin.open("Playlist.txt");
    if (!fin) { 
        cerr << "Could not open file Playlist.txt" << endl;
        exit(1);
    }

    string currentline;
    int i = 0;
    while (getline(fin, currentline) && !empty(currentline))
    {
        getline(fin, playlist[i]);
        i = i + 1;
    }

    return playlist;
}
这需要引用
istream
对象作为第一种类型,如果您在这里看到继承层次结构,您将看到
ifstream
类型的对象继承自
istream

注意:正如下面的评论所指出的,你所做的似乎并不正确。我不知道我怎么会错过这个。但你所做的似乎是错的。如果您想让
播放列表
向量存储文本文件中的所有非空行,那么应该有这样一个循环

string temp;
while (getline(fin, temp)) {
    if (!temp.empty()) {
        lines.push_back(temp);
    }
}

此外,如果您想检查是否有空格,则还需要对该逻辑进行编程

当然
getline
的文档中有关于该问题的线索。你不明白什么?我不知道你是否应该指出原始代码读取一行,如果它不是空的,丢弃它,将下一行保存到播放列表中,不管它是否为空(也忽略EOF)。这可能不是预期的设计。另外,上面的方法在实践中没有任何作用,因为一旦方法完成,
playlist
就没有任何作用。
string temp;
while (getline(fin, temp)) {
    if (!temp.empty()) {
        lines.push_back(temp);
    }
}