boost::interprocess::ptree的前向声明

Foward declaration of boost::interprocess::ptree

本文关键字:声明 ptree interprocess boost      更新时间:2023-10-16

我想为boost::property_treeptree类使用正向声明。

我使用Visual Studio 2010和增强版1.48.0。

我在我的.h 中以以下方式进行远期申报

#ifndef OPTIONS_H_
#define OPTIONS_H_
namespace boost
{
    namespace property_tree
    {
        class ptree;
    }
}
class Options
{
   // something
private:
    boost::property_tree::ptree *m_pxPropertyTree;
};
#endif // OPTIONS_H_

然后,我使用.cpp 中的类

#include <boost/property_tree/ptree.hpp>
using boost::property_tree::ptree;
Options::Options()
{
    m_pxPropertyTree = new ptree();
    // other stuff
}

当我试图编译它时,我得到了以下错误

错误C2371:"boost::property_tree::ptree":重新定义。不同的基础类型。c: \lib\boost\1.48.0\32\boost\property_tree\ptree_fwd.hpp 95

(错误描述可能会有所不同,我已经翻译了它,因为我有Visual Studio的意大利语版本)。

ptree_fwd.hpp中给出错误的行是以下

typedef basic_ptree<std::string, std::string> ptree;

相反,如果我不使用forward声明,那么一切都很顺利,并且我成功地编译了它。

我做错了什么,在这种情况下如何正确使用正向声明?

为什么不只包含boost/property_tree/ptree_fwd.hpp?此标头包含包的所有转发声明。

编辑:不包含的解决方案(您希望避免有充分理由)是为了与实际声明的内容完全匹配。

因此:

#include <string>
#include <functional>
namespace boost
{
  namespace property_tree
  {
    template < class Key, class Data, class KeyCompare >
    class basic_ptree;
    typedef basic_ptree< std::string, std::string, std::less<std::string> > ptree;
  }
}