Я занимаюсь созданием двоичного дерева с помощью связанного списка, ниже у меня есть класс funtree:
template <typename T>
class funtree
{
private:
struct Node
{
T data;
Node *left;
Node *right;
};
Node* GetNewNode(T data)
{
Node* newNode = new Node();
newNode->data = data;
newNode->left = newNode->right = NULL;
return newNode;
}
Node* Insert(Node* root, T data)
{
if(root == NULL) //empty tree
{
root = GetNewNode(data);
return root;
}
else if(data <= root->data)
{
root->left = Insert(root->left, data);
}
else
{
root->right = Insert(root->left, data);
}
return root;
}
bool Search(Node* root, int data)
{
if(root == NULL)
return false;
else if (root->data == data)
return true;
else if (data <= root->data)
return Search(root->left, data);
else
return Search(root->right, data);
и мой основной метод:
T main()
{
Node* root; // pointer to root node
root = NULL; // setting tree as empty
Insert(root,15);
Insert(root,10);
Insert(root,20);
T num;
cout<<"Enter number to be searched\n";
cin>>num;
if(Search(root, num) == true)
cout<<"Found\n";
else
cout<<"Not Found\n";
}
Я пытаюсь проверить свой метод поиска, чтобы узнать, работает ли он, и когда я пытаюсь скомпилировать, я получаю только ошибку:
main.c||undefined reference to 'WinMain@16'|
Программа также является консольным приложением, и они оба находятся в одном классе, я не думаю, что это проблемы, но на всякий случай это нужно знать.
РЕДАКТИРОВАТЬ:
Я изменил некоторые части кода, но вставлю его, как он выглядит в моем компиляторе, вместо того, чтобы разделять основную функцию и класс:
#include <iostream>
using namespace std;
template <typename T>
class funtree
{
private:
struct Node
{
T data;
Node *left;
Node *right;
};
Node* GetNewNode(T data)
{
Node* newNode = new Node();
newNode->data = data;
newNode->left = newNode->right = NULL;
return newNode;
}
Node* Insert(Node* root, T data)
{
if(root == NULL) //empty tree
{
root = GetNewNode(data);
return root;
}
else if(data <= root->data)
{
root->left = Insert(root->left, data);
}
else
{
root->right = Insert(root->left, data);
}
return root;
}
bool Search(Node* root, int data)
{
if(root == NULL)
return false;
else if (root->data == data)
return true;
else if (data <= root->data)
return Search(root->left, data);
else
return Search(root->right, data);
}
int main()
{
Node* root; // pointer to root node
root = NULL; // setting tree as empty
Insert(root,15);
Insert(root,10);
Insert(root,20);
T number;
cout<<"Enter number to be searched\n";
cin>>number;
if(Search(root, number) == true)
cout<<"Found\n";
else
cout<<"Not Found\n";
}
в вашем коде есть много проблем, надеюсь, что этот кусок кода поможет
prob1: declear struct Узел как закрытый, но попытка доступа к нему в основном
prob2: root * при изменении параметра при новом узле, но вы не вернули новый корень. либо определите Insert как Node* Insert(Node*& root, T data)
либо назначьте возвращаемое значение функции root.
prob3: main всегда должен возвращать int
#include <iostream>
using namespace std;
template <typename T>
class funtree
{
public:
struct Node
{
T data;
Node *left;
Node *right;
};
Node* GetNewNode(T data)
{
Node* newNode = new Node();
newNode->data = data;
newNode->left = newNode->right = NULL;
return newNode;
}
Node* Insert(Node* root, T data)
{
if(root == NULL) //empty tree
{
root = GetNewNode(data);
return root;
}
else if(data <= root->data)
{
root->left = Insert(root->left, data);
}
else
{
root->right = Insert(root->left, data);
}
return root;
}
bool Search(Node* root, int data)
{
if(root == NULL)
return false;
else if (root->data == data)
return true;
else if (data <= root->data)
return Search(root->left, data);
else
return Search(root->right, data);
}
};
int main()
{
funtree<int> tree;
funtree<int>::Node* root; // pointer to root node
root = NULL; // setting tree as empty
root = tree.Insert(root,15);
root = tree.Insert(root,10);
root = tree.Insert(root,20);
int num;
cout<<"Enter number to be seared\n";
cin>>num;
cout<<num;
if(tree.Search(root, num) == true)
cout<<"Found\n";
else
cout<<"Not Found\n";
return 0;
}
измените T main()
на int main()
... это должно удалить ошибку.... main() всегда возвращает int...
C:\Users\Admin\Desktop\CSProjects\treefun\main.cpp||In member function int funtree<T>::main()':|
Кажется, вы помещаете свой основной метод в класс шаблона. Это не сработает. Вам нужна ваша основная функция, не являющаяся членом. Он возвращает int
и обычно либо:
int main();
или
int main(int argc, char* argv[]);
Возможно, вам придется изменить свою компиляцию также потому, что когда компоновщик ожидает, что WinMain
обычно указывает, что он создает программу GUI. Но ваш код выглядит как консольная программа.