簡體   English   中英

在Boost序列化中,boost :: local_time :: local_date_time給出錯誤

[英]In Boost serialization, boost::local_time::local_date_time gives error

我正在嘗試序列化MyData,但boost :: local_time :: local_date_time給出了錯誤: “錯誤1錯誤C2512:'boost :: local_time :: local_date_time_base <>':沒有適當的默認構造函數可用”

下面是代碼:

// MyData.hpp文件

struct MyData
{
std::string id;
std::string name;
boost::local_time::local_date_time time; 

private:
friend class boost::serialization::access;
template
void serialize(Archive &ar, const unsigned int version)
{
ar & id;
ar & name;
ar & time;  // when i comment this line, error goes off
} 

public:
MyData(void);
MyData(const parameter_strings & parms);

virtual ~MyData(void);
};
}

// MyData.cpp file

MyData::MyData(void)
{
}

MyData::~MyData(void)
{
}

MyData::MyData(const parameter_strings & parms)
{
// implementation aprt
}

BOOST_CLASS_EXPORT_IMPLEMENT(MyData); BOOST_CLASS_IMPLEMENTATION(MyData,boost :: serialization :: object_serializable); BOOST_CLASS_TRACKING(MyData,boost :: serialization :: track_selectively);

請為這個主題提供幫助,投入更多時間,但到目前為止沒有任何用處。

我可以使用posix日期時間獲取當前日期和時間嗎? 或我需要在哪里打電話給建設者約會。

謝謝

文檔狀態

boost :: date_time庫與boost :: serialization庫的文本和xml存檔兼容。 可序列化的類的列表為:

  • boost::gregoriandate
    date_durationdate_periodpartial_datenth_day_of_week_in_monthfirst_day_of_week_in_month last_day_of_week_in_monthfirst_day_of_week_beforefirst_day_of_week_after greg_monthgreg_daygreg_weekday
  • boost::posix_time
    ptimetime_durationtime_period

所以,是的。 但是您應該使用ptime而不是local_date_time。

現在,首先,編譯器抱怨它不知道如何初始化time成員(因為它沒有默認構造函數)。 這與序列化無關:

struct Oops
{
    boost::local_time::local_date_time time; 
    Oops() { }
};

已經有相同的問題。 修理它:

struct FixedOops
{
    boost::local_time::local_date_time time; 
    FixedOops() : time(boost::local_time::not_a_date_time) 
    { 
    }
};

現在,要序列化:

#include <boost/archive/text_oarchive.hpp>
#include <boost/date_time/posix_time/time_serialize.hpp>
#include <boost/date_time/local_time/local_time.hpp>

struct parameter_strings {};

struct MyData
{
    std::string id;
    std::string name;
    boost::posix_time::ptime time; 

  private:
    friend class boost::serialization::access;
    template <typename Archive>
        void serialize(Archive &ar, const unsigned int version)
        {
            ar & id;
            ar & name;
            ar & time;  // when i comment this line, error goes off
        } 

  public:
    MyData() : time(boost::posix_time::not_a_date_time) { }
    MyData(parameter_strings const&) : time(boost::posix_time::not_a_date_time) { }
    virtual ~MyData() { };
};

int main()
{
    boost::archive::text_oarchive oa(std::cout);
    MyData data;

    oa << data;
}

所以那是

  • 更改為ptime
  • 包括posix_time的序列化頭。

程序打印:

22 serialization::archive 10 0 0 0  0  0 0 0 0 15 not-a-date-time

在Coliru上實時觀看

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM