Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

compile error: ifstream::open only accepts string values in quotes "" and not string variables

Does open function have some sort of restriction as to what kind of string value is passed in?

ifstream file;
string filename = "output.txt";
file.open(filename);

I tried to pass a string value with a string variable, but when it tries to compile, the result is...

agent.cpp:2:20: error: ofstream: No such file or directory
agent.cpp: In function ‘std::string readingline(std::string)’:
agent.cpp:11: error: aggregate ‘std::ifstream file’ has incomplete type and cannot be     defined
agent.cpp: In function ‘int main()’:
agent.cpp:44: error: aggregate ‘std::ofstream writefile’ has incomplete type and cannot be defined

On the other hand, when I just pass a string value in quotes like "filename.txt" , it compile fine and runs fine.

ifstream file;
file.open("output.txt");

Why is this the case?

Is there a way to solve this problem?

like image 769
Jason Kim Avatar asked Dec 18 '11 03:12

Jason Kim


2 Answers

Sadly, this is how the constructor and open of std::(i|o)fstream are defined by the standard. Use file.open(filename.c_str()).

Some standard libraries provide an extension that allows std::string as a parameter, e.g. Visual Studio.

like image 151
Xeo Avatar answered Sep 22 '22 01:09

Xeo


I got the problem to go away by including fstream and passing filename.c_str() instead of just filename.

The message about an incomplete type is because you are missing a header (probably anyway, you didn't show a full example).

And open takes a c-style string, not the string class.

like image 28
tpg2114 Avatar answered Sep 24 '22 01:09

tpg2114