【发布时间】:2018-09-04 01:00:34
【问题描述】:
我很困惑为什么以下代码由于以下错误而无法编译:'rootLevel' was not declared in this scope。
据我了解,struct NodeLevel 是在 class Solution 之前声明和定义的,这不是 Solution 类可以使用此类的充分条件吗?
谢谢!
struct NodeLevel{
int level;
BinaryTreeNode * node;
NodeLevel(int val, BinaryTreeNode * x) : level(val), node(x) {}
};
class Solution {
public:
vector<vector<int>> levelOrder(BinaryTreeNode* root) {
queue<NodeLevel> q;
rootLevel = NodeLevel(0, root);
q.push(rootLevel);
/*
do some stuff with the queue
*/
}
};
【问题讨论】:
-
NoteLevel rootLevel = NodeLevel(0, root); -
代码中有太多的小怪事。当我清理并获得minimal reproducible example 时,我已经本能地修复了这个错误。
-
rootLevel的第一个用法是rootLevel = NodeLevel(0, root);。这不会将其声明为变量 - 如果声明了rootLevel,它会使用它,但(与其他一些编程语言不同)不声明变量。要么将该行从rootLevel = NodeLevel(0, root)更改为NodeLevel rootLevel = NodeLevel(0, root)(在 C++11 和更高版本中,这可以是auto rootLevel = NodeLevel(0, root))或者(更简单地说,因为它明确避免创建对象然后复制它)NodeLevel rootLevel(0, root)。 -
@user4581301 这是一个错字。我试图删除原来的注释行,但在那里遗漏了一个“/”。
-
@Peter 感谢您的详细回复!我对 C++ 不够熟悉,显然有时仍然忘记声明变量类型。感谢您发现这一点!