2016-11-30 6 views
0

1つの終了ステータスが返さこれは単純なバイナリツリープログラムのコードです:私はDevのC++で私のコードをコンパイルするとき、私はこのエラーを取得:[エラー] Idは

#include <iostream> 
using namespace std; 

template <class Tree> 

class node 
{ 
public: 
    node() 
    { 
     this->tree=NULL; 
     this->leftnode=this->rightnode=NULL; 

    }; 

    ~node(); 

    node(Tree* base) 
    { 
     this->tree=base; 
     this->leftnode=this->rightnode=NULL; 
    }; 

    Tree* getnodevalue() 
    { 
     return this->tree; 
    }; 

    node* getleftnode() 
    { 
     return leftnode; 
    }; 

    node* getrightnode() 
    { 
     return rightnode; 
    }; 

    void newleft(node* val) 
    { 
     this->leftnode=val; 
    }; 

    void newright(node* val) 
    { 
     this->rightnode=val; 
    }; 

    void newnode(Tree* val) 
    { 
     this->tree=val; 
    }; 

    int chkleaf() 
    { 
     if(this->leftnode==NULL && this->rightnode==NULL) 
      return 1; 
     return 0; 
    } 

    void insert(node* nextnode, int* value) 
    { 
     node <int>* nodecounter= new node<int>(value); 
     node<int> *p, *q; 
     p=q=nextnode; 

     while(*value!=*(p->getnodevalue()) && q!=NULL) 
     { 
      p=q; 
      if(*value<*(p->getnodevalue())) 
       q=p->getleftnode(); 
      else 
       q=p->getrightnode(); 

     }; 

     if(*value==*(p->getnodevalue())) 
     { 
      cout<<"Duplicate"<<*value<<"\n"; 
      delete nodecounter; 
     } 
     else if(*value<*(p->getnodevalue())) 
      p->newleft(nodecounter); 
     else 
      p->newright(nodecounter); 
    }; 


    private: 
     Tree* tree; 
     node* leftnode; 
     node* rightnode; 
}; 


int main(int argc, char* argv[]) 
{ 
      int newtree[5]={0,45,67,34,24}; 
      node<int>* node1= new node<int>(); 
      node1->newnode(&newtree[0]); 

    for(int i=1; newtree[i]>0; i++) 
    { 
     node1->insert(node1, &newtree[i]); 
    }; 
    return 0; 
} 

私は何を理解することはできません問題は、私は以前にこのエラーがあったことはありません。それはコーディングの問題なのでしょうか?

+1

(この場合リンクされている)コンパイラは正確に何を言っていますか? –

+1

@Skyward確かに 'ld'ももっと詳細なエラーメッセージを出しましたか? – Biffen

+1

デストラクタが不足している可能性がありますか? – Biffen

答えて

0

リンカーはデストラクタ定義が不足していると不平を言う。

~node() {} 

変更

node(); 

か、あなたがC++ 11

~node() = default; 

を使用している場合もdelete文を使用して、デストラクタで使用されるメモリを解放する必要があります。

+0

このようにすばやく解決していただきありがとうございます。ポインタを削除するだけですか? – Skyward

+0

'node'がyesよりもポインタの唯一の所有者である場合。それ以外の場合、C++でのowershipについては、ここを参照してください:http://stackoverflow.com/questions/94227/smart-pointers-or-who-owns-you-baby –

関連する問題