我想使用ptree
类boost::property_tree
的前向声明。Foward声明boost :: interprocess :: ptree
我使用Visual Studio 2010和boost版本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 \提升\ 1.48.0 \ 32 \提升\ property_tree \ ptree_fwd.hpp 95
(错误描述可以是不同的,我把它翻译,因为我的Visual Studio的意大利版)。
,让我的错误,在ptree_fwd.hpp线,如下
typedef basic_ptree<std::string, std::string> ptree;
相反,如果我不使用前声明,一切顺利的话,我成功编译它。
我在做什么错了,以及我在这种情况下如何正确使用前向声明?
'ptree'不是类,但一个'typedef'(即另一种类型的别名)。这意味着当您尝试转发声明时,您将其作为类来执行,并且类和typedef将发生冲突。 – 2012-02-24 15:40:45
所以我必须转发basic_ptree模板? – Jepessen 2012-02-24 15:52:36
@JoachimPileborg你为什么评论而不是回答? – 2012-02-24 15:55:10