0

私のg ++​​が気に入らないように見えるこの関数がありますが、その理由はわかりません。

バグかもしれないので書いたのですが、コンパイラが示すエラーが見当たりません。

ここに関連する部分を貼り付けます。

// STRUCT
struct node {
  int data;
  node * next;
};

// PROTOTYPE
void removeFirst( node ** root );

// DEFINITION
void removeFirst( node ** root ) {
    node * tmp = *root
    *root = tmp->next; // is equivalent to (*root)->next
}

linkedLists.cpp:89:2: error: invalid operands to binary expression ('node *' and 'node **')
        *root = tmp->next;
        ^~~~~
1 error generated.

注: tmp は単純な .xml であるため、実際に削除する必要はありませんnode *

4

1 に答える 1

3

;あなたは最初の課題の後に欠席しました。したがって、コンパイラは関数を次のように読み取ります

node *tmp = *root * root ...

これによりエラーが発生します。(ヒント: コンパイル エラーが発生しない場合は、常に 1 行さかのぼって確認してください。)

また、最初のノードを削除した後にメモリを解放する ( tmp) ことを検討してください。そうしないと、メモリ リークが発生します。これは、ノードをどのように割り当てるかによって異なりnewますdelete tmp。それらの場合はmalloc、を使用してfree(tmp)ください。各ノードごとにメモリを割り当てない場合 (たとえば、ノードの配列全体を割り当ててから使用する場合)、 deallocate はすべきではありませんtmpが、ノードを空きとしてマークしたい場合があります (配列の管理方法によって異なります)ノードの)。

于 2013-09-15T17:26:26.523 に答える