неопределенная ссылка в том же файле
Вопрос
Я получаю неопределенную ссылку на один частный метод в классе.Вот короткий фрагмент кода (но в настоящее время все это находится в одном исходном файле и не разделено на заголовочный и исходный файлы).
#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);
но разве определение этой функции не находится прямо под ней?
Решение
Ваша перегрузка Destroy_tree не ограничена btree.В реализации отсутствует btree::и является обязательным, поскольку его нет в определении класса:
void btree::destroy_tree(node * leaf)
{
if(leaf!=NULL)
{
destroy_tree(leaf->left);
destroy_tree(leaf->right);
delete leaf;
}
}
Другие советы
Основная проблема, которую я вижу, заключается в следующем:
void destroy_tree(node *leaf)
должно быть:
void btree::destroy_tree(node *leaf)
Также нет возможности создать объект btree.Возможно, вам следует сделать это:
class btree
{
public:
btree();
~btree();
void destroy_tree();
private:
void destroy_tree(node *leaf);
node *root;
};
Не связан с StackOverflow