我想使用ptree
boost::property_tree
类的前向声明。
我使用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;
相反,如果我不使用前向声明,一切顺利,我成功编译。
我做错了什么以及如何在这种情况下正确使用前向声明?
答案 0 :(得分:1)
为什么不包括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;
}
}