我正在尝试为我的字符串类实现getline方法,该方法将从数据文件中获取行,直到到达分隔符为止。我的IDE给我一个错误,提示没有匹配功能。
我尝试将类型从ifstream切换到fstream或istream,而这并没有改变。
我的getline函数:
ifstream& getline(ifstream &is,myString& s,char& delim)
{
char *c=new char[500];
is.get(c,500);
int i=0;
while(c[i-1]!=delim)
{
is.get(c,500);
s+=c;
}
delete[]c;
return is;
}
我的主:
int main(int argc, char*argv[])
{
myString str;
ifstream DataFile(NULL);
cout << "AFF: " << argv[1] << endl;
cout<<"AFF: "<<argv[2]<<endl;
DataFile.open(argv[1]);
if(!DataFile)
{
cout<<"File not found"<<endl;
}
DataFile.getline(DataFile,str,',');
cout<<str<<endl;
}
我不能使用stl字符串类,我需要读入以或/ n分隔的文件。我正在构造此方法,以便可以解析数据文件并将信息放入向量中
答案 0 :(得分:0)
getline
不是std::ifstream
的成员,所以不要在DataFile
上调用它。
DataFile.getline(DataFile,str,',');
成为
getline(DataFile,str,',');
此外,传递对字符文字的引用不是一个好主意。不编译-尝试剥离const
ness)
ifstream& getline(ifstream &is,myString& s,char& delim)
需要成为
ifstream& getline(ifstream &is,myString& s, const char & delim)
或
ifstream& getline(ifstream &is,myString& s, char delim)
因为传递对char
的引用实际上并不会带来太大收益。
雷米·勒博(Remy Lebeau)在评论中指出,您真正想要做的是打开getline
来使用...处理任何标准输入流
istream& getline(istream &is,myString& s, char delim)
这可以解决这个问题,但是请注意,在实施{{1时,会出现一些逻辑错误(将c[i-1]
设置为零后立即{i
会立即出现在我面前) }}可能会导致一两个问题。我建议使用chat with the Rubber Duck,并在询问之前使用your development environment's debugger清理其余部分。