我在名为foo1,foo2,...,foo5的文件夹中有一些文本文件。我试着写一个C ++程序 打印出文件的内容,但编译器发出错误。 这是程序。
int main(int argc, char *argv[])
{
string common="foo";
for(int count=1;count<=5;++count)
{
//Convert count to an string.
stringstream ss;
ss<<count;
string numstring=ss.str();
string filename=common+numstring;
ifstream infile(filename);
string line;
//Print out the lines from the file.
while(getline(infile,line))
{
cout<<line<<endl;
}
}
return 0;
}
编译器发出错误,如
g++ -Wall c++.cpp
c++.cpp: In function ‘int main(int, char**)’:
c++.cpp:26: error: no matching function for call to ‘std::basic_ifstream<char, std::char_traits<char> >::basic_ifstream(std::string&)’
/usr/include/c++/4.4/fstream:454: note: candidates are: std::basic_ifstream<_CharT, _Traits>::basic_ifstream(const char*, std::_Ios_Openmode) [with _CharT = char, _Traits = std::char_traits<char>]
/usr/include/c++/4.4/fstream:440: note: std::basic_ifstream<_CharT, _Traits>::basic_ifstream() [with _CharT = char, _Traits = std::char_traits<char>]
/usr/include/c++/4.4/iosfwd:81: note: std::basic_ifstream<char, std::char_traits<char> >::basic_ifstream(const std::basic_ifstream<char, std::char_traits<char> >&)
有人可以帮我解决这个问题吗?如果我在终端输入cat foo*
,程序的输出应该是我得到的。
答案 0 :(得分:3)
替换:
ifstream infile(filename);
与
ifstream infile(filename.c_str());
您发布的错误消息显示了这一点。 fstream
是basic_fstream<>
的typedef。从本质上讲,您的错误消息表明没有fstream
构造函数带有string&
,但有一个带char*
。
答案 1 :(得分:1)
你不能这样做:
ifstream infile(filename);
ifstream
类不知道如何将字符串作为文件名。我确实知道如何使用字符数组:
ifstream infile(filename.c_str());
在引入迭代之前,您应该使用单个输入文件解决这个问题。 开始简单并建立起来。一路测试。永远不要添加到不起作用的代码。