2016-11-11 17 views
1

コピーコンストラクタに警告があります。未使用の変数警告にエラーがあります

基本的にコピー代入にエラーがあり、解決しましたが、警告(エラーとして処理されます)がコピーコンストラクタでポップアップします。

IntList::IntList(const IntList& cpy){ 
    head = 0; 
    tail = 0; 
    for(IntNode* i = cpy.head; i != 0; i = i->next){ 
    push_back(i->data); 
    } 
    IntList* obj1; 
    IntList* obj2 = obj1; 
} 

IntList& IntList::operator=(const IntList& rhs){ 
    head = 0; 
    tail = 0; 
    for(IntNode* i = rhs.head; i != 0; i = i -> next){ 
    push_back(i->data); 
    } 
    IntList* obj1; 
    IntList* obj2 = obj1; 
    return *obj2; 
} 

私はOBJ1とobj2が割り当てられているので、私は、それが使用さだと思う(しかし、なぜそれが???未使用とみなされている)

私はこれを試してみましたが、それでも

IntList* obj1; 
IntList* obj2; 
obj2 = obj1; 
+4

*割り当て*されていますが、後でその値が使用されないため、割り当ては文字通り無駄です。 –

+0

実際のコンパイラ警告を含めてください。この質問は閉鎖される可能性があります – antlersoft

答えて

1

を解決していませんこれらの記述

IntList* obj1; 
IntList* obj2 = obj1; 

は意味をなさない。削除してください。

は、コピー代入演算子

IntList& IntList::operator=(const IntList& rhs){ 
    head = 0; 
    tail = 0; 
    for(IntNode* i = rhs.head; i != 0; i = i -> next){ 
    push_back(i->data); 
    } 
    IntList* obj1; 
    IntList* obj2 = obj1; 
    return *obj2; 
} 

が無効であることを考慮してください。以前に割り当てられたすべてのメモリをリストのために解放するわけではありません。そしてそれを自己への参照を返すでしょう。だから、最後の文は、オペレータは、次のよう

IntList & IntList::operator =(const IntList &rhs) 
{ 
    while (head) 
    { 
     IntNode *tmp = head; 
     head = head->next; 
     delete tmp; 
    } 

    tail = head; 

    for (IntNode* i = rhs.head; i != 0; i = i -> next) 
    { 
     push_back(i->data); 
    } 

    return *this; 
} 
0

を見ることができます

return *this; 

あなたはreturn *this;と代入演算子関数のobj1obj2を含む2行を置き換える必要がありますしなければなりません。 obj1obj2を含む2行は、コピーコンストラクタでは必要ありません。

+0

メンバー関数push_backがトリックを行うと思います:) –

0

次のコードは使用していません。それは無意味です。

また、リストをコピーしているように見えますが、ヘッドノードを実際にポインタに割り当てていないようです。したがって、機能が終了すると、コピーされたリストが失われます。

+0

@Vivekそして、push_back関数は何をしますか?あなたはどう思いますか?:) –

+0

彼はそれが何を示していません。われわれの知る限りでは、ノードのdataプロパティにデータ値を追加するだけです。 –

+0

修正:ノードi –

関連する問題