0

我有一个使用 boost 的相对较大的项目(在 VS2010 中)。由于某种原因,我无法确定一个简单的代码示例,我在库中遇到了一个错误:

boost_1_53_0\boost/unordered/unordered_set.hpp(56): error C3083: 'detail': the symbol to the left of a '::' must be a type
boost_1_53_0\boost/unordered/unordered_set.hpp(505) : see reference to class template instantiation 'anydsl::boost::unordered::unordered_set<T,H,P,A>' being compiled

问题可能来自其他地方,但编译器绝对没有给出关于它的起源的提示。

它可能来自哪里的任何想法?

还有其他人遇到过类似的问题吗?

在遇到错误后,我将我的 boost 1.47.0 升级到了 1.53.0,但问题仍然存在。

4

1 回答 1

2

正如 所指出的kassak,错误消息表明您unordered_set.hpp在您自己的另一个命名空间中时包含。永远不要那样做,因为坏事发生了。

在您的特定情况下,编译器会尝试解析

typedef boost::unordered::detail::set<A, T, H, P> types;

在您的命名空间内anydsl。由于anydsl::boost::unordered::detail不存在,它会引发一个(有点误导)detail没有命名类型的错误。

于 2013-03-21T16:56:37.753 回答