【发布时间】:2020-05-23 12:58:54
【问题描述】:
当我们为一棵树或一个链表创建一个结构时,这种性质的东西:
struct TreeNode {
int val;
TreeNode *left;
TreeNode *right;
TreeNode(int x) : val(x), left(NULL), right(NULL) {}
};
队列存储结构节点的类型是什么?我认为这是一个指向结构的指针。
std::queue<TreeNode*> q;
但是如果我尝试像这样初始化多个节点:
TreeNode* l = nullptr, r = nullptr;
它不起作用,你必须这样做
TreeNode *l = nullptr, TreeNode *r = nullptr;
有人可以帮我更好地理解这一点吗?
编辑:阅读此答案后Declaring multiple object pointers on one line causes compiler error 我的理解是:在 C 和 C++ 中, * 绑定到声明符,而不是类型说明符。在这两种语言中,声明都是基于表达式的类型,而不是对象。
那么队列是如何声明的呢?
【问题讨论】:
-
什么是
queue?是您正在使用的std::queue,还是您没有向我们展示的某个自定义(如果是,为什么)? -
倒数第二个声明了一个
TreeNode *和一个TreeNode(当你用nullptr初始化它时,后者会彻底混淆编译器)。很明显,您收到了一个错误,它可能会告诉您同样多的信息。 “它不起作用”是模糊的。您应该包含收到的逐字错误消息,以及您不理解的具体内容。而且,让我们明确一点,TreeNode *l = nullptr, TreeNode *r = nullptr;也不起作用;那应该是TreeNode *l = nullptr; TreeNode *r = nullptr;。或TreeNode *l = nullptr, *r = nullptr; -
TreeNode* l = nullptr, r = nullptr;不起作用,因为stackoverflow.com/questions/13618282/… -
@WhozCraig 我稍后在程序中为其分配
TreeNode*类型的值时出现类型不匹配,其中包含“从 nullptr 到非标量类型 TreeNode 的无效转换”字样,我也从TreeNode* 为 int,如果我在开始时将其分配为 root 而不是 nullptr,然后稍后将其更改为 TreeNode*。 -
That all belongs in your question,不清楚您不理解的错误消息是什么。