ошибка компиляции: ifstream :: open принимает только строковые значения в кавычках "", а не строковые переменные - PullRequest
5 голосов
/ 18 декабря 2011

Имеет ли функция open какое-то ограничение относительно типа передаваемого строкового значения?

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

Я пытался передать строковое значение с помощью строковой переменной, но когда он пытаетсяскомпилировать, результат будет ...

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

С другой стороны, когда я просто передаю строковое значение в кавычках, таких как "filename.txt", оно прекрасно компилируется и работает нормально.

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

Почему это так?

Есть ли способ решить эту проблему?

Ответы [ 3 ]

5 голосов
/ 18 декабря 2011

К сожалению, это то, как конструктор и open из std::(i|o)fstream определены стандартом.Используйте file.open(filename.c_str()).

Некоторые стандартные библиотеки предоставляют расширение, которое позволяет std::string в качестве параметра, например Visual Studio.

1 голос
/ 18 декабря 2011

У меня проблема, чтобы уйти, включив fstream и передав filename.c_str() вместо просто filename.

Сообщение о неполном типе вызвано тем, что вам не хватает заголовка (возможно, в любом случае, вы не показали полный пример).

И open принимает строку в стиле c, а не класс string.

1 голос
/ 18 декабря 2011

Я думаю, что ваши сообщения об ошибках могут не иметь отношения к рассматриваемому коду, но open принимает C-стиль const char*, а не C ++ string.Вам нужно будет использовать filename.c_str() в вызове, чтобы он работал правильно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...