用包含同一类的struct的向量初始化
Class with vector of struct, which contains the same class
我有一个类Node和一个结构Edge。但是,当结构在类之前编写时,结构会抱怨不知道距离是多少。反过来也是如此,当结构在后面定义时,类抱怨不知道什么是Edge(向量的类型)。
//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
包含Node
,Node
包含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
设置为指针。)
您的定义是循环的:它试图将Node
放入Edge
中,并将边的向量放入Node
中。例如,您需要将其中一个作为指针:
class Node;
struct Edge{
Node *node;
int distance;
};
class Node {
private:
std::vector<Edge> vectorOfEdges;
};
附言:结构后面缺少一个分号。
相关文章:
- 写入向量<向量<bool>>
- 函数向量_指针有不同的原型,我可以构建一个吗
- std::向量与传递值的动态数组
- 将值指定给向量(2D)的向量中的某个位置
- std::map<struct,struct>::find 找不到匹配项,但是如果我循环通过 begin() 到 end(),我在那里看到匹配项
- 找不到成员对象:没有名为get_event()的成员,也处理多态性和向量
- Openssl 1.1.1d无效使用不完整的类型"struct dsa_st"
- 将向量传递给<struct> Lua 表
- 替代搜索函数和哈希向量<struct>C++
- 用struct初始化C 向量时的构造函数误差
- C :struct中的向量,push_back错误
- 为什么在对自定义对象的向量进行分类时,我们将在struct的定义中包括比较函数
- 从文件中读取到struct并添加到向量
- 如何打印random_shuffle向量<struct>的值
- C++向量<Struct>排序不起作用
- 在struct构建的向量中添加元素
- 在向量上找到第一对元素 (int) 并得到第二对元素 (struct)
- 用包含同一类的struct的向量初始化
- 初始化struct向量的向量的好方法(每个向量都有一个初始值)
- 如何在c++类的构造函数中给出struct的向量作为参数?