2015-10-23 2 views
0

BST.hC2440 '=' не может преобразовать из 'Int' в «BST <int> :: Node *

#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-> left = value; расположенный в функции addValue в файле заголовка. Я не уверен, почему я не могу присвоить значение указателю слева. Если кто-то может помочь, это может быть здорово.

+0

Сообщение об ошибке кажется мне очень понятным. Каков тип 'root-> left'? Каков тип 'value'? Имеет ли смысл передавать эти две вещи друг другу? – ApproachingDarknessFish

+0

@TuttiFruttiJacuzzi Теперь, когда я думаю об этом, я пытаюсь получить root-> left point для этого значения. – Bryan

+0

@Bryan ваш базовый код BST также имеет ошибки. Я предложил исправить эти ошибки, чтобы оставить вопрос актуальным, но он был отклонен. [Рекомендуемое редактирование] (https://stackoverflow.com/review/spected-edits/9953382). Может быть, вы можете применить эти изменения к вопросу, если вы так чувствуете. –

ответ

2

Линии

 root->left = value; 

и

 root->left = value; 

не правы. Вы не можете назначить объект типа int объекту типа Node*.

Они должны быть

 root->left = new Node(value); 

и

 root->left = new Node(value); 

соответственно.

0

Как и ваша ошибка, эти два типа несовместимы. Тип шаблона - int (первая строка в основном), а тип left - Node*. Вы хотите сказать root->data = value? Либо это, либо вам нужно создать новый Node, установите его data на value and then assign the new node to root-> left`.

+0

Теперь, когда я думаю об этом, я пытаюсь добавить root-> left point к этому значению. – Bryan

Смежные вопросы