不允许使用不完整的类型
Incomplete Type Is Not Allowed
试图以简单的父/子节点类创建创建,但不允许进入不完整的类型。为什么?
class Node {
public:
Node ParentNode; //Error on this line
string NodeName;
Node(Node *node) : ParentNode(*node) {
}
};
您正在尝试:
Node ParentNode; //Error on this line
,但节点目前不是一个完整的类型(实际上您正在定义它),结构不能包含本身的实例,它可以包含指针或对本身实例的引用,但不能包含一个实际的实例实例。毕竟,如果允许这样的递归遏制,它将在哪里结束?
错误暗示了类的定义在定义类时类的定义是不完整的。
一个对象不能包含其自己类型的实例 - 它将是无限大的。
你想要
Node* ParentNode;
和
Node(Node *node) : ParentNode(node)
相关文章:
- 字符类型转换不兼容
- C++模板/别名 - 模板参数列表中参数 1 处的类型/值不匹配
- 错误:"模板<类_Tp,类_Dp>类 std::unique_ptr"的模板参数列表中参数 1 的类型/值不匹配
- 为什么"fun(i)"被推导出为"fun<int&>"而不是"fun<int>",因为"i"是"int"的类型而不是参考?
- 创建模板类型而不新建/删除
- 成员引用基类型 'char' 不是 C++ 中的结构或联合
- "+=" 操作在类型之间不起作用 std::复杂<double>和__complex__双精度
- 何时使用表达式的类型(而不是类别)?
- 表达式必须具有类类型。不知道怎么解决
- 不同c++编译器之间的自动类型推导不匹配
- 调用的对象类型 'double' 不是 report() 函数的函数或函数指针
- 模板 ctor 类型推导不起作用(没有匹配的构造函数用于初始化 ...)与函数<>参数
- 在变量名后声明带有 () 的非内部类型与不使用变量名的行为不同。即 std::map<int,char>x(); - 这是怎么回事?
- 在 lambda 中从引用类型捕获的值的类型,不使用通用捕获
- 使用 AWS c++ 接口将文件上传到 s3 时内容类型标签不正确
- 有没有办法通过插入新类型名称而不是 int 来使用 2 位大小类型而不是 int?
- 模板参数列表中参数 3 处的类型/值不匹配
- 为什么函数返回类型中不允许参数推导?
- 有没有办法用不变语法获得当前的类类型?
- 标准容器模板可以用不完整类型实例化吗?