无法访问/设置空结构的值



我正在制作一个二叉树模板类,虽然这个特定的运行时错误从未发生过,但用整数初始化 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 行中,我将起始>数据设置为 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:BSTI 代码

//**** 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

我使用以下代码尝试重现错误:

#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");
}

而且我无法重现错误(编译正常(。你能提供完整的代码吗?

相关内容

  • 没有找到相关文章

最新更新