0

我很难理解为什么下面的代码不能在 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 *&'
}
4

2 回答 2

2

&p不是类型的变量Node*。它是一个类型的常数Node*

即使您可以以某种方式获取对 的引用p并将其传递给test()p=p->next;仍然会失败,因为您无法分配给常量。

于 2013-04-02T06:30:24.527 回答
1

您通过地址传递变量,而不是通过引用指向变量的指针。我认为这会起作用:

void main() {
    Node *p1=new Node();
    test(p1);   

    Node p={0};
    Node* p2 = &p;
    test(p2);     
}
于 2013-04-02T06:32:15.210 回答