我的程序中的一个关键功能遇到了一点问题,我到处都放置了错误测试行,并将其单独归为一条if语句”
template <typename Item>
bool BTNode<Item>::isNull(string leftOrRight)
{
    std::cout<<"Is NULL test outer."<<endl;
    bool returnNullTest = true;
    if (leftOrRight == "left")
    {
        std::cout<<"Is NULL test inner 1."<<endl;
        if (left != NULL)
        {
            returnNullTest = false;
        }
    }
    else if (leftOrRight == "right") //.c_str()
    {
        std::cout<<"Is NULL test inner 2."<<endl;
        if (right != NULL)
        {
            returnNullTest = false;
        }
    }
    std::cout<<"NULL TEST FINISHED."<<endl;
    return returnNullTest;
}
这是输出:
Is NULL test outer.
Is NULL test inner 2.
Segmentation fault (core dumped)
这是“左”和“右”的定义:
BTNode<Item>* left;
BTNode<Item>* right;
在 BTNode 'left' 和 'right' 的构造函数中定义为:
left = NULL;
right = NULL;
有没有人知道我在哪里出错了,我试过了
if (left == NULL)
和
if (right == NULL)
与布尔值切换,但我得到了同样的错误。
这是'BTNode.h'
#ifndef matt_BTNode
#define matt_BTNode
#include <cstdlib>
namespace mattassign3{
template <typename Item>
class BTNode
{
    private:
    Item* data;
    BTNode<Item>* left;
    BTNode<Item>* right;
    public:
    BTNode();
    BTNode(Item* startingData);
    ~BTNode();
    BTNode<Item>* getLeft();
    BTNode<Item>* getRight();
    Item* getData();
    bool isNull(string leftOrRight);
    void setLeft(BTNode<Item>* leftToSet);
    void setRight(BTNode<Item>* rightToSet);
    void printInclData();
    float comparableNumber();
    string comparableString();
};
}
#include "BTNode.template"
#endif