Ошибка компиляции, сгенерированная в Unix-терминале, но не в Visual Studio 2013 при открытии файлового потока

0

Мой код выглядит так:

ifstream myfile;
string fileName;
cin >> filename;
myfile.open(fileName);

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

Изображение 174551

Извините, если это табу, но это была самая быстрая вещь, о которой я мог думать. Строка, на которую он ссылается (main.cpp 22), является строкой

myfile.open(fileName);

Опять же, компилируется и работает отлично в Visual Studio 2013, но не в этой оболочке Linux. Честно говоря, если кто-нибудь может помочь мне понять сообщение об ошибке, которое будет началом.

Заранее благодарю за любую помощь

  • 2
    Скрин-шоты безобразны, но не табу. Но твоя нечитаема.
  • 0
    О, я сделал ошибку, не просмотрев его перед публикацией. Я предполагал, что будет размещена ссылка, а не сам скриншот.
Показать ещё 2 комментария
Теги:
filestream

2 ответа

2

Вам нужно использовать флаг компилятора -std=c++11. Следующая программа компилирует и строит на моей машине, используя:

g++ -Wall -std=c++11    test-484.cc   -o test-484
#include <iostream>
#include <fstream>
#include <string>

using namespace std;

int main()
{
   ifstream myfile;
   string fileName;
   cin >> fileName;
   myfile.open(fileName);
   return 0;
}

Кстати, в вашем опубликованном коде у вас есть

   string filename;
              ^^ lower case n not upper case N
  • 0
    Спасибо, это работает. Меня беспокоит только то, скомпилирует ли мой профессор этот флаг или нет.
  • 0
    Если вы не хотите использовать C ++ 11, исправьте свой код (используя myfile.open(filename.c_str()); должен быть совместим со старыми версиями C ++)
1

Если вы не используете С++ 11, вы также можете сделать следующее:

#include <iostream>
#include <fstream>
#include <string>

int main () {
std::ifstream myfile;
std::string fileName;
std::cin >> fileName;
myfile.open(fileName.c_str());
}

Но доступ к строке C непосредственно таким образом не очень хорош, если это возможно, следуйте рекомендациям R Sahu по использованию С++ 11.

  • 0
    Спасибо, я внесу это изменение, если мой профессор не скомпилирует его, используя флаг, предложенный Р. Саху

Ещё вопросы

Сообщество Overcoder
Наверх
Меню