C2440&#39; =&#39;无法转换为&#39; int&#39;到&#39; BST <int> ::节点*

时间:2015-10-23 04:19:11

标签: 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* 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

BST.cpp

// BSTTest.cpp : Defines the entry point for the console application.
//

#include "stdafx.h"
#include "BST.h"
#include <iostream>
#include <cstddef>
#include <string>
using namespace std;


int main()
{

BST<int> B;

B.add(5);

B.getRoot();

return 0;
}

所以错误,这篇文章的标题,我发生了两次。它在两行中显示为:root-&gt; left = value;位于头文件中的addValue函数中。我不知道为什么我不能将值赋给左边的指针。如果有人能提供帮助那就太棒了。

2 个答案:

答案 0 :(得分:2)

     root->left = value;

     root->left = value;

不对。您不能将int类型的对象分配给类型为Node*的对象。

他们需要

     root->left = new Node(value);

     root->left = new Node(value);

分别

答案 1 :(得分:0)

就像你的错误所说,这两种类型是不兼容的。模板类型为int(main中的第一行),left的类型为Node*。你的意思是说root->data = value吗?要么您需要创建新的Node,请将其data设置为value and then assign the new node to root-&gt; left`。