我正在制作一个二叉树模板类,尽管从未发生过使用int初始化BST的特定运行时错误,但我还没有解决使用字符串初始化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设置为null的地方。将start-> left和start-> right设置为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
答案 0 :(得分:0)
我使用以下代码尝试重现该错误:
#include <string>
#include <stdexcept>
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;
};
template <typename T>
class BST : public BSTInterface<T>
{
private:
struct Node
{
T data;
Node *left;
Node *right;
};
Node *root;
public:
BST()
{
root = new Node;
}
bool addNode(const T& newVal, Node *start)
{
start->data = newVal; // ERROR HERE
return true;
}
bool removeNode(const T&) override {
throw std::runtime_error("Not implemented yet");
}
bool clearTree() override {
throw std::runtime_error("Not implemented yet");
}
std::string toString() const override {
throw std::runtime_error("Not implemented yet");
}
bool addNode(const T& val) override {
return addNode(val, root);
}
};
int main(int argc, char * argv[])
{
BST<std::string> myBST;
myBST.addNode("e");
}
而且我无法重现该错误(编译正确)。您能提供完整的代码吗?