我正在解决一个前向声明问题。B 引用了 A,而 A 使用了一个 std::vector 来存储 B。 A 和 B 都定义在通用(无)命名空间中。
在 A 的头文件中前向声明 B 可以解决 A 中成员的问题。然而,我在同一头文件中为 A 定义了哈希函数,这会导致问题。
#include "B.h"
class B;
class A{
public:
std::vector<B> bs;
}
namespace std
{
template <>
struct hash<A>
{
size_t operator()(const A& k) const
{
std::size_t seed = 0;
boost::hash_combine(seed, k.foo);
boost::hash_combine(seed, k.bar);
for(B &b:k.bs){
boost::hash_combine(seed, b.abc);
}
return seed;
}
};
}
该函数访问B的向量,因此需要前向声明。然而,在父头文件中它并没有使用前向声明。不幸的是,我不能在std命名空间内再次前向声明它,因为这将在定义之间创建歧义。有什么想法吗?
foo
和bar
作为A
的成员。请发布您的错误。 - R Sahu