2017-01-27 5 views
1

Таким образом, у меня есть эта функция, которая записывает в текстовый файл, но я продолжаю получать эту ошибку, которая имеет какое-то отношение к синтаксису вывода из используемого потока, на который я верю. Может ли кто-нибудь помочь диагностировать это для меня?ofStream error: запись в текстовый файл?

Спасибо,

Эвин

int writeSave(string chName, string chSex, string chRace, 
       vector<int> chAttributes, int chLevel, int chStage) 
{ 
    ofstream outputFile("saveFile.txt"); 
    outputFile << "chName: " << chName << 
        "\nchSex: " << chSex << 
        "\nchRace: " << chRace << 
        "\nchAttributes: " << chAttributes << 
        "\nchLevel: " << chLevel << 
        "\nchStage: " << chStage; 
    return 0; 
} 

Запуск /home/ubuntu/workspace/saveGame/sgFunc.cpp

/home/ubuntu/workspace/saveGame/sgFunc.cpp: In function ‘int writeSave(std::string, std::string, std::string, std::vector<int>, int, int)’: /home/ubuntu/workspace/saveGame/sgFunc.cpp:27:44: error: cannot bind ‘std::basic_ostream<char>’ lvalue to ‘std::basic_ostream<char>&&’ 
        "\nchRace: " << chRace << 
              ^

In file included from /usr/include/c++/4.8/iostream:39:0, 
       from /home/ubuntu/workspace/saveGame/sgFunc.cpp:1: /usr/include/c++/4.8/ostream:602:5: error: initializing argument 1 of ‘std::basic_ostream<_CharT, _Traits>& std::operator<<(std::basic_ostream<_CharT, _Traits>&&, const _Tp&) [with _CharT = char; _Traits = std::char_traits<char>; _Tp = std::vector<int>]’ 
    operator<<(basic_ostream<_CharT, _Traits>&& __os, const _Tp& __x) 
    ^
+0

Если вы не переопределили '' '' оператор для 'векторов', вы не можете просто сделать' << chAttributes' –

ответ

5

std::vector<> не могут передаваться (по умолчанию) к поток вывода символов, который вы пытаетесь сделать с помощью << chAttributes. Вам необходимо вручную преобразовать его в строку или предоставить operator<< для потоковой передачи его в поток вывода символов.

Один из вариантов, если вы хотите записать содержимое с разделителями-запятыми (вам необходимо включить <iterator> и <algorithm>):

outputFile << "chName: " << chName << 
       "\nchSex: " << chSex << 
       "\nchRace: " << chRace << 
       "\nchAttributes: "; 

copy(chAttributes.begin(), 
    chAttributes.end(), 
    ostream_iterator<int>(outputFile, ",")); 

outputFile << "\nchLevel: " << chLevel << 
       "\nchStage: " << chStage; 

Я написал этот пример кода, предполагая using namespace std;, как ваш код, как представляется, , Я бы посоветовал не использовать эту строку, а вместо этого std:: -qualify материал, который вы хотите использовать из пространства имен std.

Смежные вопросы