c++ - 使用 vector 资源句柄的递归成员初始化

标签 c++ c++11 initialization member

下面的代码显然不能编译(相当于定义一个类为C { C myC } ,这将占用无限内存)。问题是 C++ 实际上是如何进行检查的?

class Node {
     vector<Node> mChildren{ Node }
}

当我尝试编译时,出现以下错误。

trie.cpp:6:35: error: expected primary-expression before ‘}’ token
vector<Node> mChildren { Node };
                               ^
trie.cpp:6:35: error: could not convert ‘{<expression error>}’ from ‘<brace-enclosed initializer list>’ to ‘std::vector<Node>’

是不是因为类Node还没有完全声明?为什么我可以将它用作 vector 的模板参数。类似的问题出现在

class C {
  C myC;
};

最佳答案

Node 类中有两个问题。您在末尾缺少一个分号,并且在该行的末尾有一个奇怪的 {Node} 。修复它,它将编译。

class Node {
  Node() {}
  vector<Node> mChildren= { Node() };
};

这编译得很好。

关于c++ - 使用 vector 资源句柄的递归成员初始化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29780300/

相关文章:

c++ - 使用新结构的聚合初始化是否有效?

c# - 访问 `this` : invalid in C#, 的字段初始值设定项在 Java 中有效吗?

c++ - 初始化 C/C++ 多维数组时忽略大小

c++ - 用boost读取json文件

c++ - 由于未知函数 EditAnywhere 导致 UE4 错误编译

通过模板 : why doesn't this work? 的 C++ 混合

c++ - 在编译时/模板检查变量的值

c++ - Linux 上的 CMake FindJNI 问题

c++11 - std::function 对象失效

c++ - 如何解析工厂函数中的构造函数签名