我的程序中的一个关键功能遇到了一点问题,我到处都放置了错误测试行,并将其单独归为一条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