Ускоренная сериализация с использованием отдельных файлов .h и .cpp

Я экспериментирую с библиотекой ускоренной сериализации, и у меня почти все работает. Единственная проблема заключается в том, что я пытаюсь сериализовать объект с отдельными файлами .h и .cpp. Когда я компилирую с помощью этой команды:

g++ boostSerialize.cpp Class.cpp -lboost_serialization

, я получаю эту ошибку:

/tmp/cc8kbW6J.o: In function `void boost::serialization::access::serialize<boost::archive::text_oarchive, Class>(boost::archive::text_oarchive&, Class&, unsigned int)':
boostSerialize.cpp:(.text._ZN5boost13serialization6access9serializeINS_7archive13text_oarchiveE5ClassEEvRT_RT0_j[void boost::serialization::access::serialize<boost::archive::text_oarchive, Class>(boost::archive::text_oarchive&, Class&, unsigned int)]+0x25): undefined reference to `void Class::serialize<boost::archive::text_oarchive>(boost::archive::text_oarchive&, unsigned int)'

это то, что находится в моем .h:

#ifndef CLASS_H
#define CLASS_H
#include <iostream>
#include <string>
#include <boost/serialization/access.hpp>

using namespace std;

class Class{

    friend class boost::serialization::access;
    int a,b,c;
    string stringy;
    template<class Archive>
        void serialize(Archive &ar, const unsigned int);
    public:
        Class(int ab, int bb, int cb);

};
#endif

и моем .cpp:

#include <iostream>
#include "Class.h"

using namespace std;

Class::Class(int ab, int bb, int cb){
    a = ab;
    b = bb;
    c = cb;
    stringy = "Text";
}

template<class Archive>
    void Class::serialize(Archive &ar, const unsigned int){
        ar & a & b & c & stringy;
    }

. Вместо этого я попытался поместить все только в .cpp и включить это сработало нормально, поэтому я знаю, что это как-то связано с включением .h. По какой-то причине он не находит функцию сериализации? Думаю, я мог бы просто использовать .cpp вместо обоих, но мне очень нравится организация, и я хотел бы использовать это для большого проекта. Любые идеи? Заранее спасибо.

5
задан Adam Keenan 20 March 2012 в 22:20
поделиться