很抱歉我对 C++ 缺乏经验,但我花了一些时间解决循环依赖问题,因此提出了这个问题。
我正在尝试用 C++ 表示邻接表。
我有结构节点
,
struct Node{
int data;
unordered_set<Node, Hash> links;
bool operator == (Node const& other) const{
return (data == other.data);
}
Node(){
}
Node(int data){
this->data = data;
}
};
我有我的 Hash
仿函数
struct Hash {
size_t operator()(const Node &node) const {
return node.data;
};
};
我注意到 Hash
使用 Node
而 Node
使用 Hash
如果出于本练习的目的,我想在一个文件中声明所有内容,我应该先声明哪个文件。
我尝试对 Hash
和 Node
进行前向声明,先定义它们中的任何一个,但都没有编译。
PS:这不是作业,我是想在线解图算法题
最佳答案
延迟定义 Hash::operator()
直到定义 Node
并在 Hash
之前声明 Node
。您可以引用不完整的类型,只要您不对其进行任何操作即可。
class Node;
class Hash{
public:
size_t operator()(const Node &node) const;
};
class Node{
public:
int data;
unordered_set<Node, Hash> links;
};
inline size_t Hash::operator()(const Node &node) const{
return node.data;
}
关于C++ 循环依赖与邻接表表示的混淆,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28910892/