C++ C2440'=';无法从';int';至';英国夏令时<;int>;::节点*

C++ 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

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* 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);