我很难理解为什么下面的代码无法在Visual Studio 2012下编译,错误已经嵌入在下面的代码中。 我觉得它与引用堆栈对象有关,但不太确定。 有人可以帮忙吗?
由于
#include <iostream>
typedef struct Node {
Node *next;
} Node;
void test(Node *&p) {
p=p->next;
}
void main() {
Node *p1=new Node();
test(p1); // this line compiles okay
Node p={0};
test(&p); // error C2664: 'test' : cannot convert parameter 1 from 'Node *' to 'Node *&'
}
答案 0 :(得分:2)
&p
不是Node*
类型的变量。它是Node*
类型的常量。
即使你能以某种方式引用p
并将其传递给test()
,p=p->next;
仍会失败,因为你无法分配常量。
答案 1 :(得分:1)
您按地址传递变量,而不是通过引用传递变量的指针。我认为这会奏效:
void main() {
Node *p1=new Node();
test(p1);
Node p={0};
Node* p2 = &p;
test(p2);
}