Я делаю класс шаблона двоичного дерева, и хотя эта конкретная ошибка во время выполнения никогда не возникала при инициализации BST с помощью int, я не справился с этим при инициализации BST со строками. Ошибка возникает в отмеченной строке.
#ifndef BST_H
#define BST_H
#include "BSTInterface.h"
template <typename T>
class BST : public BSTInterface<T>
{
public:
BST()
{
root = new Node;
root = NULL;
}
bool addNode(const T& newVal, Node *start)
{
start->data = newVal; // ERROR HERE
return true;
}
private:
struct Node
{
T data;
Node *left;
Node *right;
};
Node *root;
};
#endif
Я попытался установить для каждого из значений root значение null, но я получаю эту ошибку сборки:
BST.h(18): error C2593: 'operator =' is
ambiguous
В строке 18 я устанавливаю start-> data на ноль. Установка start-> left и start-> right to null не приводит к ошибкам сборки.
Я должен иметь возможность установить их на null, а не на какое-либо произвольное значение, чтобы другой код (который я не могу изменять) работал. Любая помощь будет высоко ценится.
Редактировать: Включены побочные эффекты сверхминимализации.
#include "BST.h"
int main(int argc, char * argv[])
{
BST<std::string> myBST;
myBST.addNode("e");
}
Дополнительная функция в BST, которая вызывается из main:
bool addNode(const T& newVal)
{
return addNode(newVal, root);
}
Редактировать 2: код для BSTInterface
//**** YOU MAY NOT MODIFY THIS DOCUMENT ****/
#ifndef BST_INTERFACE_H
#define BST_INTERFACE_H
#include <string>
/** A binary tree node with data, left and right child pointers */
template<typename T>
class BSTInterface
{
public:
BSTInterface(void) {}
virtual ~BSTInterface(void) {}
/** Return true if node added to BST, else false */
virtual bool addNode(const T&) = 0;
/** Return true if node removed from BST, else false */
virtual bool removeNode(const T&) = 0;
/** Return true if BST cleared of all nodes, else false */
virtual bool clearTree() = 0;
/** Return a level order traversal of a BST as a string */
virtual std::string toString() const = 0;
};
#endif // BST_INTERFACE_H