1

こんにちは、スタックの実装を書きたいのですが、残念ながら何か問題が発生しました

CPP ファイル

  Node* head=0;

std::cout << "front insertion" << std::endl;
addBeg(head, 1);
std::cout<<head<<std::endl;

ヘッダファイル

class Node
{public:
    int value;
    class Node *next_el;
    Node(int value){ this->value=value;next_el=NULL;}
};

void addBeg(Node *head, int value){
head=new Node(value); //even that doesn't work!?
}

メインの「ヘッド」がまだ NULL 値である理由を本当に知りたいです。私は何を間違っていますか?

4

3 に答える 3

0

addBeg() 関数内でのみポインター値を変更していますが、変数の値を変更したいと考えています。私が似たような問題を抱えていて、先生が「うまくいかない場合はアスタリスクを追加してください」と言ったことを思い出します。

だからここにあります:

class Node
{public:
    int value;
    class Node *next_el;
    Node(int value){ this->value=value;next_el=NULL;}
};

void addBeg(Node **head, int value){
*head=new Node(value); //even that doesn't work!?
}

Node* head=0;
std::cout << "front insertion" << std::endl;
addBeg(&head, 1);//notice &
std::cout<<head<<std::endl;

他の解決策は、@ Betaの回答に示されているように参照を使用することです

于 2013-08-11T20:34:57.167 に答える
0

独自の連結リストの実装を作成する場合 (単に std::list のように既存のものを使用するのではなく)、連結リストが C (C++ ではなく) でどのように機能するかを最初に確認することをお勧めします。 . たとえば、チュートリアルは次の場所にあります: http://www.codeproject.com/Articles/24684/How-to-create-Linked-list-using-CC

C で動作するようになったら、C++ の「ラッパー」をクラスまたはテンプレートとして記述してみることができます。それ以外は、あなたの質問は、リストがどのように機能するかを知るのに十分正確ではありません.

于 2013-08-11T19:13:13.903 に答える