所以我试图学习如何编写我的第一个BST代码,这很难....我已经遇到了几行代码的问题。问题在于插入,但我已经包含了所有内容,以便我可以获得有关我的样式/其他错误的一些反馈。我被建议使用一个指向指针实现的指针,但我们还没有学到它,所以我感觉不舒服/知道如何编码它。
错误是
[trinhc@cs1 Assignment_3]$ g++ movieList.cpp -o a.out
/tmp/ccLw6nsv.o: In function `main':
movieList.cpp:(.text+0x7a): undefined reference to `Tree::Tree()'
movieList.cpp:(.text+0xa7): undefined reference to `Tree::insert(int, std::basic_string<char, std::char_traits<char>, std::allocator<char> >)'
collect2: ld returned 1 exit status
tree.h文件
#ifndef TREE_H
#define TREE_H
#include <string>
#include <iostream>
using namespace std;
class Tree
{
public:
Tree();
bool insert(int k, string s);
private:
struct Node
{
int key;
string data;
Node *left;
Node *right;
};
Node* root;
bool insert(Node*& root, int k, string s);
};
#endif
tree.cpp
#include <iostream>
#include "tree.h"
#include <stack>
#include <queue>
#include <string>
using namespace std;
Tree::Tree()
{
root = NULL;
}
bool Tree::insert(int k, string s)
{
return insert(root, k, s);
}
bool Tree::insert(Node*& current_root, int k, string s)
{
if(root == NULL){
current_root = new Node;
current_root->key = k;
current_root->data = s;
current_root->left = NULL;
current_root->right = NULL;
return true;
}
else if (current_root->key == k)
return false;
else if (current_root->key > k)
insert(current_root->left, k, s);
else
insert (current_root->right,k, s);
}
movieList.cpp
#include <iostream>
#include <stack>
#include <queue>
#include <string>
#include "tree.h"
using namespace std;
int main()
{
Tree test;
test.insert(100, "blah");
return 0;
}
答案 0 :(得分:2)
树测试();不是如何定义类Test的对象,这实际上是声明了一个名为test的函数,它返回Tree。
试
树测试; test.insert(100,“blah”); 返回0;
答案 1 :(得分:1)
几点:
您需要将成员变量root的名称更改为其他内容 - 我建议使用m_root,my_root或tree_root,或者其他类似的东西。现在,在包含root作为参数的任何函数中,您都会遇到一些命名空间冲突。这也可以让你跟踪你所指的根。
bool Tree::insert(Node*& root, int k, string s)
{
if(root == NULL){
root = new Node;
root->key = k;
root->data = s;
root->left = NULL;
root->right = NULL;
return true;
} else
if (root == k) //Comparison between pointer and number.
return false;
else
if (root->key > k)
insert(root->left, k, s);
else
insert (root->right,k, s);
}
您需要将注释行上的root更改为root-&gt; key。
除此之外,看起来它会起作用。
编辑:另外,其他人说的是什么。您将对象声明为TYPE name ()
如果要调用默认构造函数(),那么主函数中的代码应为
Tree test;
test.insert(...)
答案 2 :(得分:1)
我复制了一些代码,这对我来说很好用:
主:
#include <iostream>
#include <stack>
#include <queue>
#include <string>
#include "tree.h"
int main()
{
Tree test;
test.insert(100, "blah");
test.insert(50, "fifty");
test.insert(110, "one hundred ten");
return 0;
}
插入功能:
bool Tree::insert(Node*& currentRoot, int k, string s)
{
if(currentRoot == NULL){
currentRoot = new Node;
currentRoot->key = k;
currentRoot->data = s;
currentRoot->left = NULL;
currentRoot->right = NULL;
return true;
}
else if (currentRoot->key == k)
return false;
else if (currentRoot->key > k)
insert(currentRoot->left, k, s);
else
insert (currentRoot->right,k, s);
}
除此之外,你在整个地方都有语法错误。我也更改了名称,因为有人指出有一点命名问题。 CurrentRoot很有意义,因为你在每次递归时都将它传递给左或右子树的根。
答案 3 :(得分:0)
您不应该在构建命令中添加tree.cpp
吗?
[trinhc @ cs1 Assignment_3] $ g ++ movieList.cpp -o a.out
会变成
[trinhc @ cs1 Assignment_3] $ g ++ tree.cpp movieList.cpp -o a.out