c++ - boost 错误 : reference to 'detail' is ambiguous

标签 c++ boost c++11 boost-date-time boost-tuples

我正在使用 gcc-4.4.7 --std=c++0x 和来自 boost-1.53​​ 的几个库编译一个大型程序。编译器提示 boost 库(如下)中的一堆错误,而不是我的代码。这是 boost 库中的错误吗?我将如何去弄清楚出了什么问题?任何建议表示赞赏!

    /usr/bin/g++  -O0 -ggdb -fno-inline  --std=c++0x -pedantic -Wall -fno-strict-aliasing -Wno-non-template-friend -Wno-long-long -Wno-deprecated -m64 -I /home/user1/pkg/boost-64bit  -I/data/home_local/user2/dev/bbb-onForge-trunk/src -I/data/home_local/user2/dev/bbb-onForge-trunk/src/util/containers -I/data/home_local/user2/dev/bbb-onForge-trunk/src/util/misc -I /usr/include      -c -o /data/home_local/user2/dev/bbb-onForge-trunk/obj/Linux/dbg/bbb/trainOne.o /data/home_local/user2/dev/bbb-onForge-trunk/src/bbb/trainOne.cpp
    In file included from /home/user1/pkg/boost-64bit/boost/filesystem/path_traits.hpp:23,
                     from /home/user1/pkg/boost-64bit/boost/filesystem/path.hpp:25,
                     from /home/user1/pkg/boost-64bit/boost/filesystem.hpp:16,
                     from /data/home_local/user2/dev/bbb-onForge-trunk/src/bbb/parameter.hpp:31,
                     from /data/home_local/user2/dev/bbb-onForge-trunk/src/bbb/trainOne.cpp:6:
    /home/user1/pkg/boost-64bit/boost/system/error_code.hpp: In function 'boost::system::error_code& boost::throws()':
    /home/user1/pkg/boost-64bit/boost/system/error_code.hpp:410: error: reference to 'detail' is ambiguous
    /home/user1/pkg/boost-64bit/boost/type_traits/is_reference.hpp:25: error: candidates are: namespace boost::detail { }
    /home/user1/pkg/boost-64bit/boost/tuple/detail/tuple_basic.hpp:51: error:                 namespace boost::tuples::detail { }
    In file included from /home/user1/pkg/boost-64bit/boost/tokenizer.hpp:20,
                     from /home/user1/pkg/boost-64bit/boost/date_time/date_parsing.hpp:15,
                     from /home/user1/pkg/boost-64bit/boost/date_time/gregorian/parsers.hpp:13,
                     from /home/user1/pkg/boost-64bit/boost/date_time/gregorian/gregorian.hpp:34,
                     from /home/user1/pkg/boost-64bit/boost/date_time/posix_time/time_formatters.hpp:12,
                     from /home/user1/pkg/boost-64bit/boost/date_time/posix_time/posix_time.hpp:24,
                     from /data/home_local/user2/dev/bbb-onForge-trunk/src/util/misc/ResourceUsage.hpp:4,
                     from /data/home_local/user2/dev/bbb-onForge-trunk/src/bbb/trainOne.cpp:6:
    /home/user1/pkg/boost-64bit/boost/token_iterator.hpp: At global scope:
    /home/user1/pkg/boost-64bit/boost/token_iterator.hpp:34: error: reference to 'detail' is ambiguous
    /home/user1/pkg/boost-64bit/boost/type_traits/is_reference.hpp:25: error: candidates are: namespace boost::detail { }
    /home/user1/pkg/boost-64bit/boost/tuple/detail/tuple_basic.hpp:51: error:                 namespace boost::tuples::detail { }
    /home/user1/pkg/boost-64bit/boost/token_iterator.hpp:39: error: template argument 3 is invalid
    In file included from /home/user1/pkg/boost-64bit/boost/date_time/gregorian/parsers.hpp:13,
                     from /home/user1/pkg/boost-64bit/boost/date_time/gregorian/gregorian.hpp:34,
                     from /home/user1/pkg/boost-64bit/boost/date_time/posix_time/time_formatters.hpp:12,
                     from /home/user1/pkg/boost-64bit/boost/date_time/posix_time/posix_time.hpp:24,
                     from /data/home_local/user2/dev/bbb-onForge-trunk/src/util/misc/ResourceUsage.hpp:4,
                     from /data/home_local/user2/dev/bbb-onForge-trunk/src/bbb/trainOne.cpp:6:
    /home/user1/pkg/boost-64bit/boost/date_time/date_parsing.hpp: In function 'date_type boost::date_time::parse_date(const std::string&, int)':
    /home/user1/pkg/boost-64bit/boost/date_time/date_parsing.hpp:133: error: no match for 'operator!=' in 'beg != tok.boost::tokenizer<TokenizerFunc, Iterator, Type>::end [with TokenizerFunc = boost::char_separator<char, std::char_traits<char> >, Iterator = __gnu_cxx::__normal_iterator<const char*, std::basic_string<char, std::char_traits<char>, std::allocator<char> > >, Type = std::basic_string<char, std::char_traits<char>, std::allocator<char> >]()'
    /home/user1/pkg/boost-64bit/boost/tuple/tuple_comparison.hpp:41: note: candidates are: bool boost::tuples::operator!=(const boost::tuples::null_type&, const boost::tuples::null_type&)
    /home/user1/pkg/boost-64bit/boost/blank.hpp:73: note:                 bool boost::operator!=(const boost::blank&, const boost::blank&)
    /home/user1/pkg/boost-64bit/boost/function/function_base.hpp:764: note:                 bool boost::operator!=(boost::detail::function::useless_clear_type*, const boost::function_base&)
    /home/user1/pkg/boost-64bit/boost/function/function_base.hpp:752: note:                 bool boost::operator!=(const boost::function_base&, boost::detail::function::useless_clear_type*)
    /home/user1/pkg/boost-64bit/boost/date_time/date_parsing.hpp:134: error: no match for 'operator++' in '++beg'
    /home/user1/pkg/boost-64bit/boost/date_time/date_parsing.hpp:138: error: no match for 'operator*' in '*beg'
    /home/user1/pkg/boost-64bit/boost/date_time/date_parsing.hpp:143: error: no match for 'operator*' in '*beg'
    /home/user1/pkg/boost-64bit/boost/date_time/date_parsing.hpp:148: error: no match for 'operator*' in '*beg'
    /home/user1/pkg/boost-64bit/boost/date_time/date_parsing.hpp: In function 'date_type boost::date_time::parse_undelimited_date(const std::string&)':
    /home/user1/pkg/boost-64bit/boost/date_time/date_parsing.hpp:178: error: no match for 'operator!=' in 'ti != tok.boost::tokenizer<TokenizerFunc, Iterator, Type>::end [with TokenizerFunc = boost::offset_separator, Iterator = __gnu_cxx::__normal_iterator<const char*, std::basic_string<char, std::char_traits<char>, std::allocator<char> > >, Type = std::basic_string<char, std::char_traits<char>, std::allocator<char> >]()'
    /home/user1/pkg/boost-64bit/boost/tuple/tuple_comparison.hpp:41: note: candidates are: bool boost::tuples::operator!=(const boost::tuples::null_type&, const boost::tuples::null_type&)
    /home/user1/pkg/boost-64bit/boost/blank.hpp:73: note:                 bool boost::operator!=(const boost::blank&, const boost::blank&)
    /home/user1/pkg/boost-64bit/boost/function/function_base.hpp:764: note:                 bool boost::operator!=(boost::detail::function::useless_clear_type*, const boost::function_base&)
    /home/user1/pkg/boost-64bit/boost/function/function_base.hpp:752: note:                 bool boost::operator!=(const boost::function_base&, boost::detail::function::useless_clear_type*)
    /home/user1/pkg/boost-64bit/boost/date_time/date_parsing.hpp:178: error: no match for 'operator++' in '++ti'
    /home/user1/pkg/boost-64bit/boost/date_time/date_parsing.hpp:179: error: no match for 'operator*' in '*ti'
    In file included from /home/user1/pkg/boost-64bit/boost/date_time/posix_time/time_formatters.hpp:19,
                     from /home/user1/pkg/boost-64bit/boost/date_time/posix_time/posix_time.hpp:24,
                     from /data/home_local/user2/dev/bbb-onForge-trunk/src/util/misc/ResourceUsage.hpp:4,
                     from /data/home_local/user2/dev/bbb-onForge-trunk/src/bbb/trainOne.cpp:6:
    /home/user1/pkg/boost-64bit/boost/date_time/time_parsing.hpp: In function 'time_duration boost::date_time::parse_undelimited_time_duration(const std::string&)':
    /home/user1/pkg/boost-64bit/boost/date_time/time_parsing.hpp:228: error: no match for 'operator!=' in 'ti != tok.boost::tokenizer<TokenizerFunc, Iterator, Type>::end [with TokenizerFunc = boost::offset_separator, Iterator = __gnu_cxx::__normal_iterator<const char*, std::basic_string<char, std::char_traits<char>, std::allocator<char> > >, Type = std::basic_string<char, std::char_traits<char>, std::allocator<char> >]()'
    /home/user1/pkg/boost-64bit/boost/tuple/tuple_comparison.hpp:41: note: candidates are: bool boost::tuples::operator!=(const boost::tuples::null_type&, const boost::tuples::null_type&)
    /home/user1/pkg/boost-64bit/boost/blank.hpp:73: note:                 bool boost::operator!=(const boost::blank&, const boost::blank&)
    /home/user1/pkg/boost-64bit/boost/function/function_base.hpp:764: note:                 bool boost::operator!=(boost::detail::function::useless_clear_type*, const boost::function_base&)
    /home/user1/pkg/boost-64bit/boost/function/function_base.hpp:752: note:                 bool boost::operator!=(const boost::function_base&, boost::detail::function::useless_clear_type*)
    /home/user1/pkg/boost-64bit/boost/date_time/time_parsing.hpp:228: error: no match for 'operator++' in '++ti'
    /home/user1/pkg/boost-64bit/boost/date_time/time_parsing.hpp:232: error: no match for 'operator*' in '*ti'
    /home/user1/pkg/boost-64bit/boost/date_time/time_parsing.hpp:237: error: no match for 'operator*' in '*ti'
    /home/user1/pkg/boost-64bit/boost/date_time/time_parsing.hpp:242: error: no match for 'operator*' in '*ti'
    /home/user1/pkg/boost-64bit/boost/date_time/time_parsing.hpp:247: error: base operand of '->' has non-pointer type 'boost::date_time::parse_undelimited_time_duration(const std::string&)::tokenizer_iterator'
    In file included from /home/user1/pkg/boost-64bit/boost/date_time/gregorian/parsers.hpp:13,
                     from /home/user1/pkg/boost-64bit/boost/date_time/gregorian/gregorian.hpp:34,
                     from /home/user1/pkg/boost-64bit/boost/date_time/posix_time/time_formatters.hpp:12,
                     from /home/user1/pkg/boost-64bit/boost/date_time/posix_time/posix_time.hpp:24,
                     from /data/home_local/user2/dev/bbb-onForge-trunk/src/util/misc/ResourceUsage.hpp:4,
                     from /data/home_local/user2/dev/bbb-onForge-trunk/src/bbb/trainOne.cpp:6:
    /home/user1/pkg/boost-64bit/boost/date_time/date_parsing.hpp: In function 'boost::date_time::period<date_type, typename date_type::duration_type> boost::date_time::from_simple_string_type(const std::basic_string<charT, std::char_traits<_CharT>, std::allocator<_T2> >&) [with date_type = boost::gregorian::date, charT = char]':
    /home/user1/pkg/boost-64bit/boost/date_time/gregorian/parsers.hpp:79:   instantiated from here
    /home/user1/pkg/boost-64bit/boost/date_time/date_parsing.hpp:299: error: no match for 'operator*' in '*tok_it'
    /home/user1/pkg/boost-64bit/boost/date_time/gregorian/parsers.hpp:79:   instantiated from here
    /home/user1/pkg/boost-64bit/boost/date_time/date_parsing.hpp:305: error: no match for 'operator++' in '++tok_it'
    /home/user1/pkg/boost-64bit/boost/date_time/date_parsing.hpp: In function 'boost::date_time::period<date_type, typename date_type::duration_type> boost::date_time::from_simple_string_type(const std::basic_string<charT, std::char_traits<_CharT>, std::allocator<_T2> >&) [with date_type = boost::gregorian::date, charT = wchar_t]':
    /home/user1/pkg/boost-64bit/boost/date_time/gregorian/parsers.hpp:84:   instantiated from here
    /home/user1/pkg/boost-64bit/boost/date_time/date_parsing.hpp:299: error: no match for 'operator*' in '*tok_it'
    /home/user1/pkg/boost-64bit/boost/date_time/gregorian/parsers.hpp:84:   instantiated from here
    /home/user1/pkg/boost-64bit/boost/date_time/date_parsing.hpp:305: error: no match for 'operator++' in '++tok_it'
    In file included from /home/user1/pkg/boost-64bit/boost/date_time/posix_time/time_formatters.hpp:19,
                     from /home/user1/pkg/boost-64bit/boost/date_time/posix_time/posix_time.hpp:24,
                     from /data/home_local/user2/dev/bbb-onForge-trunk/src/util/misc/ResourceUsage.hpp:4,
                     from /data/home_local/user2/dev/bbb-onForge-trunk/src/bbb/trainOne.cpp:6:
    /home/user1/pkg/boost-64bit/boost/date_time/time_parsing.hpp: In function 'time_duration boost::date_time::str_from_delimited_time_duration(const std::basic_string<charT, std::char_traits<_CharT>, std::allocator<_T2> >&) [with time_duration = boost::posix_time::time_duration, char_type = char]':
    /home/user1/pkg/boost-64bit/boost/date_time/time_parsing.hpp:146:   instantiated from 'time_duration boost::date_time::parse_delimited_time_duration(const std::string&) [with time_duration = boost::posix_time::time_duration]'
    /home/user1/pkg/boost-64bit/boost/date_time/posix_time/time_parsers.hpp:27:   instantiated from here
    /home/user1/pkg/boost-64bit/boost/date_time/time_parsing.hpp:68: error: no match for 'operator!=' in 'beg != boost::tokenizer<TokenizerFunc, Iterator, Type>::end() const [with TokenizerFunc = boost::char_separator<char, std::char_traits<char> >, Iterator = __gnu_cxx::__normal_iterator<const char*, std::basic_string<char, std::char_traits<char>, std::allocator<char> > >, Type = std::basic_string<char, std::char_traits<char>, std::allocator<char> >]()'
    /home/user1/pkg/boost-64bit/boost/tuple/tuple_comparison.hpp:41: note: candidates are: bool boost::tuples::operator!=(const boost::tuples::null_type&, const boost::tuples::null_type&)
    /home/user1/pkg/boost-64bit/boost/blank.hpp:73: note:                 bool boost::operator!=(const boost::blank&, const boost::blank&)
    /home/user1/pkg/boost-64bit/boost/function/function_base.hpp:764: note:                 bool boost::operator!=(boost::detail::function::useless_clear_type*, const boost::function_base&)
    /home/user1/pkg/boost-64bit/boost/function/function_base.hpp:752: note:                 bool boost::operator!=(const boost::function_base&, boost::detail::function::useless_clear_type*)
    /home/user1/pkg/boost-64bit/boost/date_time/time_parsing.hpp:68: error: no match for 'operator++' in '++beg'
    /home/user1/pkg/boost-64bit/boost/date_time/time_parsing.hpp:71: error: no match for 'operator*' in '*beg'
    /home/user1/pkg/boost-64bit/boost/date_time/time_parsing.hpp:75: error: no match for 'operator*' in '*beg'
    /home/user1/pkg/boost-64bit/boost/date_time/time_parsing.hpp:79: error: no match for 'operator*' in '*beg'
    /home/user1/pkg/boost-64bit/boost/date_time/time_parsing.hpp:83: error: base operand of '->' has non-pointer type 'boost::date_time::str_from_delimited_time_duration(const std::basic_string<charT, std::char_traits<_CharT>, std::allocator<_T2> >&) [with time_duration = boost::posix_time::time_duration, char_type = char]::tokenizer_iterator'
    /home/user1/pkg/boost-64bit/boost/date_time/time_parsing.hpp:104: error: base operand of '->' has non-pointer type 'boost::date_time::str_from_delimited_time_duration(const std::basic_string<charT, std::char_traits<_CharT>, std::allocator<_T2> >&) [with time_duration = boost::posix_time::time_duration, char_type = char]::tokenizer_iterator'
    /home/user1/pkg/boost-64bit/boost/date_time/time_parsing.hpp:107: error: no match for 'operator*' in '*beg'

最佳答案

您是否在代码中执行以下操作?

using namespace boost;<br/> using namespace boost::tuples;

如果是这样,Compiler 无法判断使用以下文件中的哪个detail

/home/user1/pkg/boost-64bit/boost/type_traits/is_reference.hpp
/home/user1/pkg/boost-64bit/boost/tuple/detail/tuple_basic.hpp

关于c++ - boost 错误 : reference to 'detail' is ambiguous,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15870967/

相关文章:

c++ - FlatBuffers 中的多个根表

c++ - 为什么没有宏来切割从 std::exception 派生的 bad_weak_ptr

c++ - 为什么我的 C++ 链接器仅在删除 boost 共享目标文件后才起作用?

c++ - 您可以在 boost asio 中设置 SO_RCVTIMEO 和 SO_SNDTIMEO 套接字选项吗?

c++ - 阅读 C++ ifstream 两次?

C++ 从扩展中将 HTML 写入两个已打开的 Firefox 选项卡中的每一个

C++基本构造函数问题

c++ - 在函数返回中返回新分配的 shared_ptr 的引用是否合法?

c++ - 我可以和不可以专注于 std 命名空间吗?

c++ - 为什么 'nullptr' 命名空间中没有 'std'?