下面的代码显然不能编译(相当于定义一个类为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/