【问题标题】:friend class boost mongo_iarchive does not a name a type朋友类提升 mongo_iarchive 没有命名类型
【发布时间】:2013-04-28 08:44:59
【问题描述】:

所以我不得不重写 boost mongo 归档类型的一些功能,因此我需要这些归档类型成为我正在序列化的类的朋友。但是,我遇到了编译器查找存档类的问题。

//#include <boost/archive/mongo_iarchive.hpp>  I dont want these here!
//#include <boost/archive/mongo_oarchive.hpp>

class MyClass
{
  ... //declarations

  friend class boost::archive::mongo_oarchive;
  friend class boost::archive::mongo_iarchive;

  friend class boost::serialization::access;
  ...
};

我得到的错误是

...命名空间“boost::archive”中的错误“mongo_oarchive”未命名 输入

...命名空间“boost::archive”中的错误“mongo_iarchive”没有 命名一个类型

但是对于 serialization::access 类没有问题。我不想在这个级别包含 mongo 档案,因为我不希望客户端代码依赖于 mongo 序列化和 mongo c++ 驱动程序库。请注意,mongo 序列化库不是 boost 归档/序列化库的一部分,它是一个自定义库(尽管我认为这无关紧要)

【问题讨论】:

    标签: c++ mongodb serialization boost archive


    【解决方案1】:

    你尝试过前向声明吗?

    namespace boost
    {
    namespace archive
    {
    class mongo_oarchive;
    class mongo_iarchive;
    }
    }
    
    class MyClass
    {
          ... //declarations
    
    friend class boost::archive::mongo_oarchive;
    friend class boost::archive::mongo_iarchive;
    
    friend class boost::serialization::access;
          ...
    };
    

    【讨论】:

    • 哇,我想这会很简单......我现在的问题是为什么我需要这个 mongo_archive 类型,但是 boost::serialization::access;不需要前向声明。
    • 我最初也尝试将前向声明简单地称为 boost::archive::mongo_archive,但我遇到了与以前相同的错误,我认为这与查找命名空间或类似的东西有关?
    • @mike 我猜你已经在 .cpp 中的 MyClass.h 之前包含了 boost/serialization/access.hpp。这可以解释为什么编译器已经知道这种类型。是的,你需要命名空间。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-06-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-12-04
    相关资源
    最近更新 更多