c++ - 具有结构 vector 的类,其中包含相同的类

标签 c++ class header struct

我有一个 Node 类和一个 Edge 结构。 但是当在类之前编写结构时,结构会提示不知道什么是距离。 解决方法是一样的,当之后定义结构时,类会提示不知道什么是边( vector 的类型)。

//This is my header file

typedef struct Edge Edge;
struct Edge{

   Node node;
   int distance;

};

class Node
{

  private:

  std::vector<Edge> vectorOfEdges;

};

如何解决这个错误? 谢谢。

最佳答案

如果您真的想保持代码原样,则没有办法解决这个问题:就标准而言,std::vector<T>还不如从字面上包含 T 类型的元素, 因此你有一个循环的相互依赖 Edge包含 NodeNode包含 Edge ,这没有意义。

(实际的措辞是在不完整的类型上实例化标准库容器模板是未定义的行为。)

解决此问题的典型方法是 PIMPL 习惯用法,通过它您只需提供指向元素的指针:

struct Edge;

class Node
{
    std::unique_ptr<std::vector<Edge>> pVecImpl;
public:
    Node() : pVecImpl(::new std::vector<Edge>) { }
    // ...
};

struct Edge
{
    // as before
};

Herb Sutter 的 GotW #101描述了一个简洁的解决方案,以一种干净且有吸引力的方式抽象出这种模式。

(或者你也可以把 Edge::node 变成一个指针。)

关于c++ - 具有结构 vector 的类,其中包含相同的类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8936386/

相关文章:

c++ - 如何在 C++ 中计算 f(net)=tanh(net) 的导数

python - 将消息从一个类(class)发送到另一个类(class)

python - 如何使 MyList 可迭代?

php - 如何检查 header 是否已在 PHP 中发送

c++ - c++中头文件和库文件是什么关系?

python - 我是否在使用 getPage 的 python Twisted 中正确使用了 header ?

c++ - 如何使用 QSettings 保存和加载数据?

c++ - 使用 getline 解析用户输入的最佳方法?

c++ - 指针数据交换 vector 和队列 : deep and shallow copies

python - 使用来自不同文件 pygame 的 Sprite 对象类