0

クラス内の 1 つのプライベート メソッドへの未定義の参照を取得しています。コードの短いスニペットを次に示します (ただし、現在はすべてが 1 つのソース ファイルにあり、ヘッダー ファイルとソース ファイルに分けられていません)。

#include <iostream>

using namespace std;

struct node
{
    int key_value;
    node *left;
    node *right;
};

class btree
{
    node *root;
    btree();
    ~btree();
    void destroy_tree(node *leaf);

    public:
    void destroy_tree();
};

btree::btree()
{
    root = NULL;
}

btree::~btree()
{
    destroy_tree();
}

void btree::destroy_tree()
{
    destroy_tree(root);
}

void destroy_tree(node *leaf)
{
  if(leaf!=NULL)
  {
    destroy_tree(leaf->left);
    destroy_tree(leaf->right);
    delete leaf;
  }
}

int main()
{
    return 0;
}

コンパイラは、次の行に対して「`btree::destroy_tree(node*) への未定義の参照」を出力します。

destroy_tree(root);

しかし、その関数の定義はそのすぐ下にありませんか?

4

2 に答える 2

4

destroy_tree オーバーロードのスコープは btree ではありません。実装には btree:: がなく、クラス定義内にないため必要です。

 void btree::destroy_tree(node * leaf)
 {
   if(leaf!=NULL)
   {
     destroy_tree(leaf->left);
     destroy_tree(leaf->right);
     delete leaf;
   }
}
于 2009-06-14T00:59:35.707 に答える