2015-07-03 4 views
0

Я прочитал пример, и я пытаюсь запустить следующий код: http://www.boost.org/doc/libs/1_58_0/libs/serialization/doc/index.htmlподталкивания пример сериализации ошибки

#include <fstream> 

// include headers that implement a archive in simple text format 
#include <boost/archive/text_oarchive.hpp> 
#include <boost/archive/text_iarchive.hpp> 

///////////////////////////////////////////////////////////// 
// gps coordinate 
// 
// illustrates serialization for a simple type 
// 

class gps_position { 
private: 
    friend class boost::serialization::access; 
    // When the class Archive corresponds to an output archive, the 
    // & operator is defined similar to <<. Likewise, when the class Archive 
    // is a type of input archive the & operator is defined similar to >>. 

    template<class Archive> 
    void serialize(Archive & ar, const unsigned int version) { 
     ar & degrees; 
     ar & minutes; 
     ar & seconds; 
    } 
    int degrees; 
    int minutes; 
    float seconds; 
public: 

    gps_position() { 
    }; 

    gps_position(int d, int m, float s) : 
    degrees(d), minutes(m), seconds(s) { 
    } 
}; 

int main() { 
    // create and open a character archive for output 
    std::ofstream ofs("filename"); 

    // create class instance 
    const gps_position g(35, 59, 24.567f); 

    // save data to archive 
    { 
     boost::archive::text_oarchive oa(ofs); 
     // write class instance to archive 
     oa << g; 
     // archive and stream closed when destructors are called 
    } 

    // ... some time later restore the class instance to its orginal state 
    gps_position newg; 
    { 
     // create and open an archive for input 
     std::ifstream ifs("filename"); 
     boost::archive::text_iarchive ia(ifs); 
     // read class state from archive 
     ia >> newg; 
     // archive and stream closed when destructors are called 
    } 
    return 0; 
} 

И я получаю ошибку:

terminate called after throwing an instance of 'boost::archive::archive_exception' 
    what(): output stream error 

RUN FINISHED; Aborted; core dumped; real time: 100ms; user: 0ms; system: 0ms 
+0

выполняет ли этот код пользователя так же, как имеет права на создание и запись в файл в текущем рабочем каталоге? –

+0

Возможно, вам стоит проверить, был ли ваш файл открыт с помощью 'if (ifs.good())' – coincoin

+0

При запуске кода я вижу новый файл «filename», но файл пуст. Вы запускаете его нормально? – Mozart

ответ

1

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

Попробуйте запустить исполняемый файл где-то в другом месте или жестко закодировать путь к тому месту, где у вас есть права на запись. Попробуйте простой мир слияния с потоком, чтобы узнать, можете ли вы создать и написать файл.

+5

Также рассмотрите вопрос о том, строите ли вы ту же версию библиотеки, которая была найдена во время выполнения. – sehe

+0

При запуске кода я вижу новый файл «имя файла», но файл пуст, и я попытался в другом каталоге. Какова ваша версия для ускорения? Я использую Boost 1.58 и Netbeans для компиляции. – Mozart

+0

Привет. Извините, если это звучит педантично, но netbeans - это идеал, а не компилятор. Где-то он вызывает компилятор - возможно, g ++, но, возможно, clang. Я скомпилирован с g ++, но я сомневаюсь, что это проблема. Версия Boost такая же, поэтому я не думаю, что это проблема. Попробуйте удалить файл и запустить его снова - такое же поведение? Учитывая ваше поведение, предложение Sehe может стать победителем. – Spacemoose

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