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*。type の定数です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 に答える