C++ C2440'=';无法从';int';至';英国夏令时<;int>;::节点*
BST.hC++ C2440'=';无法从';int';至';英国夏令时<;int>;::节点*,c++,C++,BST.h #include "stdafx.h" #include <iostream> #include <cstddef> #include <string> using namespace std; #ifndef BST_H_ #define BST_H_ template <class bstdata> class BST { private: struct Node { bstdata data; Node* l
#include "stdafx.h"
#include <iostream>
#include <cstddef>
#include <string>
using namespace std;
#ifndef BST_H_
#define BST_H_
template <class bstdata>
class BST
{
private:
struct Node
{
bstdata data;
Node* left;
Node* right;
Node() : left(NULL), right(NULL){}
Node(bstdata newdata) : left(NULL), right(NULL), data(newdata){}
};
typedef struct Node* Nodeptr;
Nodeptr root;
int size;
/** Private Helper Functions **/
void addValue(Nodeptr root, bstdata value);
void printInOrder(Nodeptr root);
public:
BST();
bool isEmpty();
int getSize();
void add(bstdata value);
bstdata getRoot();
void inOrderPrint();
};
/**Public functions*/
template <class bstdata>
BST<bstdata>::BST() : size(0), root(NULL){};
template <class bstdata>
void BST<bstdata>::add(bstdata value)
{
if (root == NULL)
{
root = new Node(value);
size++;
}
else
addValue(root, value);
}
template <class bstdata>
void BST<bstdata>::addValue(Nodeptr root, bstdata value)
{
if (value == root->data)
return;
if (value < root->data)
{
if (root->left == NULL)
{
root->left = value;
size++;
}
}
else
addValue(root-> left, value);
if (root-> right == NULL)
{
root->left = value;
size++;
}
else
addValue(root-> right, value);
}
template <class bstdata>
bstdata BST<bstdata>::getRoot()
{
if (size == 0)
cout << "getRoot: there is no root in the BST" << endl;
else
return root->data;
}
#endif
#包括“stdafx.h”
#包括
#包括
#包括
使用名称空间std;
#ifndef BST_H_
#定义BST_H_
模板
BST级
{
私人:
结构体类型
{
BST数据;
节点*左;
节点*右;
Node():左(NULL),右(NULL){}
节点(bstdatanewdata):左(NULL)、右(NULL)、数据(newdata){}
};
typedef结构节点*Nodeptr;
无柄根;
整数大小;
/**私人助手功能**/
void addValue(Nodeptr root,bstdata值);
void printInOrder(Nodeptr root);
公众:
BST();
bool是空的();
int getSize();
无效添加(数据值);
bstdatagetroot();
void inOrderPrint();
};
/**公共职能*/
模板
BST::BST():大小(0),根(NULL){};
模板
void BST::添加(bstdata值)
{
if(root==NULL)
{
根=新节点(值);
大小++;
}
其他的
addValue(根,值);
}
模板
void BST::addValue(Nodeptr root,bstdata值)
{
如果(值==根->数据)
返回;
如果(值<根->数据)
{
如果(根->左==NULL)
{
根->左=值;
大小++;
}
}
其他的
addValue(根->左,值);
如果(根->右==NULL)
{
根->左=值;
大小++;
}
其他的
addValue(根->右,值);
}
模板
bstdata BST::getRoot()
{
如果(大小==0)
cout left=value;位于头文件中的addValue函数中。我不确定为什么我不能将值分配给左指针。如果有人能帮忙,那可能会很好。正如您的错误所说,这两种类型不兼容。模板类型是int
(主文件的第一行)left
的类型是Node*
。你的意思是说root->data=value
?或者你需要创建一个新的节点
,将其数据
设置为值,然后将新节点分配给root->left`。行
root->left = value;
及
不正确。不能将类型为int
的对象分配给类型为Node*
的对象
他们需要
root->left = new Node(value);
及
分别。错误消息对我来说似乎非常清楚。根->左-/code>的类型是什么?值的类型是什么?将这两个值分配给对方有意义吗?@TuttiFruttiJacuzzi现在我想了想,我正试图让根->左指向该值。@Bryan您的基本BST代码也有错误。我建议更正这些错误以保持问题的相关性,但被拒绝了。。如果您也这样认为,可能您可以将这些更改应用于问题。现在我想了想,我正在尝试将root->left point设置为该值。
root->left = value;
root->left = new Node(value);
root->left = new Node(value);