首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >boost的Foward声明::interprocess::ptree

boost的Foward声明::interprocess::ptree
EN

Stack Overflow用户
提问于 2012-02-24 15:33:32
回答 1查看 1.6K关注 0票数 2

我想对ptreeboost::property_tree使用前向声明。

我使用Visual 2010和boost版本1.48.0。

我以下面的方式(在我的.h中)执行前向声明

代码语言:javascript
复制
#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中的类

代码语言:javascript
复制
#include <boost/property_tree/ptree.hpp>

using boost::property_tree::ptree;

Options::Options()
{
    m_pxPropertyTree = new ptree();

    // other stuff
}

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

error C2371:'boost::property_tree::ptree':redefinition。不同的基本类型。c:\lib\boost\1.48.0\32\boost\property_tree\ptree_fwd.hpp 95

(错误描述可能是不同的,我翻译它是因为我有意大利版本的Visual )。

在ptree_fwd.hpp中,给出错误的行如下所示

代码语言:javascript
复制
typedef basic_ptree<std::string, std::string> ptree;

相反,如果我不使用前向声明,一切都进行得很顺利,我成功地编译了它。

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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-02-24 15:55:03

你为什么不直接加入boost/property_tree/ptree_fwd.hpp呢?此标头包含包的所有前向声明。

编辑:没有包含的解决方案(出于好的理由想要避免)是完全匹配的,实际声明的内容。

所以:

代码语言:javascript
复制
#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;
  }
}
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9433398

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档