【发布时间】:2012-06-22 04:04:09
【问题描述】:
我正在努力编译一些利用 boost 属性树的代码。我正在使用 Visual Studio 2010。
如果我尽可能简化代码以重现错误,代码如下所示...
#include "AppleiTunesLibraryImporter.h"
#include <boost/property_tree/xml_parser.hpp>
#include <boost/property_tree/ptree.hpp>
using namespace boost::property_tree;
AppleiTunesLibraryImporter::AppleiTunesLibraryImporter(){}
AppleiTunesLibraryImporter::~AppleiTunesLibraryImporter(){}
bool AppleiTunesLibraryImporter::ImportData( std::string itunes_library_xml_path )
{
ptree pt;
xml_parser::read_xml( itunes_library_xml_path.c_str(), pt, xml_parser::no_comments | xml_parser::trim_whitespace);
return true;
}
...完整的错误如下...
1> AppleiTunesLibraryImporter.cpp
1>c:\<path to my file>\thirdparty\boost\boost-1.47.0\boost/detail/allocator_utilities.hpp(178): error C2061: syntax error : identifier 'p'
1> c:\<path to my file>\thirdparty\boost\boost-1.47.0\boost/multi_index/detail/index_base.hpp(88) : see reference to function template instantiation 'void boost::detail::allocator::construct<T>(void *,const Type &)' being compiled
1> with
1> [
1> T=std::pair<const std::string,boost::property_tree::basic_ptree<std::string,std::string>>,
1> Type=std::pair<const std::string,boost::property_tree::basic_ptree<std::string,std::string>>
1> ]
1> c:\<path to my file>\thirdparty\boost\boost-1.47.0\boost/multi_index/detail/index_base.hpp(87) : while compiling class template member function 'boost::multi_index::detail::index_node_base<Value,Allocator> *boost::multi_index::detail::index_base<Value,IndexSpecifierList,Allocator>::insert_(const std::pair<_Ty1,_Ty2> &,boost::multi_index::detail::index_node_base<Value,Allocator> *)'
1> with
1> [
1> Value=std::pair<const std::string,boost::property_tree::basic_ptree<std::string,std::string>>,
1> Allocator=std::allocator<std::pair<const std::string,boost::property_tree::basic_ptree<std::string,std::string>>>,
1> IndexSpecifierList=boost::multi_index::indexed_by<boost::multi_index::sequenced<>,boost::multi_index::ordered_non_unique<boost::multi_index::tag<boost::property_tree::basic_ptree<std::string,std::string>::subs::by_name>,boost::multi_index::member_offset<std::pair<const std::string,boost::property_tree::basic_ptree<std::string,std::string>>,const std::basic_string<char,std::char_traits<char>,std::allocator<char>>,0>,std::less<std::string>>>,
1> _Ty1=const std::string,
1> _Ty2=boost::property_tree::basic_ptree<std::string,std::string>
1> ]
1> c:\<path to my file>\thirdparty\boost\boost-1.47.0\boost/multi_index/ordered_index.hpp(119) : see reference to class template instantiation 'boost::multi_index::detail::index_base<Value,IndexSpecifierList,Allocator>' being compiled
1> with
1> [
1> Value=std::pair<const std::string,boost::property_tree::basic_ptree<std::string,std::string>>,
1> IndexSpecifierList=boost::multi_index::indexed_by<boost::multi_index::sequenced<>,boost::multi_index::ordered_non_unique<boost::multi_index::tag<boost::property_tree::basic_ptree<std::string,std::string>::subs::by_name>,boost::multi_index::member_offset<std::pair<const std::string,boost::property_tree::basic_ptree<std::string,std::string>>,const std::basic_string<char,std::char_traits<char>,std::allocator<char>>,0>,std::less<std::string>>>,
1> Allocator=std::allocator<std::pair<const std::string,boost::property_tree::basic_ptree<std::string,std::string>>>
1> ]
1> c:\<path to my file>\thirdparty\boost\boost-1.47.0\boost/multi_index/sequenced_index.hpp(77) : see reference to class template instantiation 'boost::multi_index::detail::ordered_index<KeyFromValue,Compare,SuperMeta,TagList,Category>' being compiled
1> with
1> [
1> KeyFromValue=boost::multi_index::member_offset<std::pair<const std::string,boost::property_tree::basic_ptree<std::string,std::string>>,const std::basic_string<char,std::char_traits<char>,std::allocator<char>>,0>,
1> Compare=std::less<std::string>,
1> SuperMeta=boost::multi_index::detail::nth_layer<2,std::pair<const std::string,boost::property_tree::basic_ptree<std::string,std::string>>,boost::multi_index::indexed_by<boost::multi_index::sequenced<>,boost::multi_index::ordered_non_unique<boost::multi_index::tag<boost::property_tree::basic_ptree<std::string,std::string>::subs::by_name>,boost::multi_index::member_offset<std::pair<const std::string,boost::property_tree::basic_ptree<std::string,std::string>>,const std::basic_string<char,std::char_traits<char>,std::allocator<char>>,0>,std::less<std::string>>>,std::allocator<std::pair<const std::string,boost::property_tree::basic_ptree<std::string,std::string>>>>,
1> TagList=boost::mpl::vector1<boost::property_tree::basic_ptree<std::string,std::string>::subs::by_name>,
1> Category=boost::multi_index::detail::ordered_non_unique_tag
1> ]
1> c:\<path to my file>\thirdparty\boost\boost-1.47.0\boost/multi_index_container.hpp(89) : see reference to class template instantiation 'boost::multi_index::detail::sequenced_index<SuperMeta,TagList>' being compiled
1> with
1> [
1> SuperMeta=boost::multi_index::detail::nth_layer<1,std::pair<const std::string,boost::property_tree::basic_ptree<std::string,std::string>>,boost::multi_index::indexed_by<boost::multi_index::sequenced<>,boost::multi_index::ordered_non_unique<boost::multi_index::tag<boost::property_tree::basic_ptree<std::string,std::string>::subs::by_name>,boost::multi_index::member_offset<std::pair<const std::string,boost::property_tree::basic_ptree<std::string,std::string>>,const std::basic_string<char,std::char_traits<char>,std::allocator<char>>,0>,std::less<std::string>>>,std::allocator<std::pair<const std::string,boost::property_tree::basic_ptree<std::string,std::string>>>>,
1> TagList=boost::mpl::vector0<boost::mpl::na>
1> ]
1> c:\<path to my file>\thirdparty\boost\boost-1.47.0\boost/property_tree/detail/ptree_implementation.hpp(59) : see reference to class template instantiation 'boost::multi_index::multi_index_container<Value,IndexSpecifierList>' being compiled
1> with
1> [
1> Value=std::pair<const std::string,boost::property_tree::basic_ptree<std::string,std::string>>,
1> IndexSpecifierList=boost::multi_index::indexed_by<boost::multi_index::sequenced<>,boost::multi_index::ordered_non_unique<boost::multi_index::tag<boost::property_tree::basic_ptree<std::string,std::string>::subs::by_name>,boost::multi_index::member_offset<std::pair<const std::string,boost::property_tree::basic_ptree<std::string,std::string>>,const std::basic_string<char,std::char_traits<char>,std::allocator<char>>,0>,std::less<std::string>>>
1> ]
1> c:\<path to my file>\thirdparty\boost\boost-1.47.0\boost/property_tree/detail/ptree_implementation.hpp(182) : see reference to class template instantiation 'boost::property_tree::basic_ptree<Key,Data>::subs' being compiled
1> with
1> [
1> Key=std::string,
1> Data=std::string
1> ]
1> c:\<path to my file>\thirdparty\boost\boost-1.47.0\boost/property_tree/detail/ptree_implementation.hpp(182) : while compiling class template member function 'boost::property_tree::basic_ptree<Key,Data>::basic_ptree(void)'
1> with
1> [
1> Key=std::string,
1> Data=std::string
1> ]
1> ..\..\..\common\Source\AppleiTunesImporter\AppleiTunesLibraryImporter.cpp(24) : see reference to class template instantiation 'boost::property_tree::basic_ptree<Key,Data>' being compiled
1> with
1> [
1> Key=std::string,
1> Data=std::string
1> ]
对我来说,我的 ApplieiTunesLibraryImporter.cpp 文件的第 24 行只是
ptree pt;
所以,编译器不喜欢我使用它。当我使用类似的东西时,我会遇到类似的错误
ptree::const_assoc_iterator assoc_iter;
但上面的代码是最简单的,我可以让错误发生。
导致编译错误的 boost 文件 (allocator_utilities.hpp) 中的代码如下所示,但对我来说很神秘。
/* allocator-independent versions of construct and destroy */
template<typename Type>
void construct(void* p,const Type& t)
{
new (p) Type(t);
}
如果有人想尝试重现,这里是 .h 代码。
class AppleiTunesLibraryImporter
{
public:
AppleiTunesLibraryImporter();
virtual ~AppleiTunesLibraryImporter();
bool ImportData( std::string itunes_library_xml_path );
};
这一切都变成了一些大脑融化,所以如果有人能对此有所了解,将不胜感激。
干杯。
【问题讨论】:
-
我需要更多代码 - 不要发布部分错误消息和部分代码,而是将您的问题归结为您可以发布完整代码的内容,以便我们可以重现错误。
-
感谢您的回复,扎克。你是对的,我错过了一些有用的信息,所以我编辑了原始帖子以使其更完整。谢谢。
-
您应该尝试在不添加任何内容的情况下重现此问题,并提供一个可重现该问题的可编译 sn-p。对我来说,ideone.com/FhfsS 在 gcc 上使用 boost 1.49 完美运行
-
我在 mac (gcc 4.0) 和 LLVM 上编译的代码完全相同。让我伤心的是窗户。 'additions' 是指使用 xml_parser 吗?
标签: c++ boost boost-propertytree