在成员函数中创建一个对象

时间:2019-06-10 12:33:35

标签: c++ class

在成员函数中创建对象 Savvas·第十二讲 ·3小时前

大家好!

我有一个采用结构指针作为参数的类。在类的成员函数内部,我正在创建一个新结构,然后尝试调用其他成员函数,这些成员函数也将结构指针作为参数。当我进行编译时,出现一个编译器错误,告诉我:“ 无法调用成员函数'void SearchArray :: InsertToTree(Tree *&,int)'(和'bool SearchArray :: IsInTheTree(Tree *,int)'” ),没有对象”。该结构不是该类的一部分,但是即使我将它作为它的一部分,我也会遇到相同的错误。

功能如下:

edit, all the code:

struct Tree{
int item{0};
Tree* left;
Tree* right;

Tree(int val = 0){
    item = val;
    left = nullptr;
    right = nullptr;
  }
};

class SearchArray{

public:

void InsertToTree(Tree*& node, int val)
{
    if(node == nullptr)
    {
        node = new Tree(val);
        return;
    }
    else if(val < node->item)
    {
        InsertToTree(node->left, val);
    }
    else
    {
        InsertToTree(node->right, val);
    }

}

bool IsInTheTree(Tree* node, int val)
{
    if(node == nullptr)
    {
        return false;
    }
    else if(val == node->item) { return true; }
    else if(val < node->item)
    {
        return IsInTheTree(node->left, val);
    }
    else { return IsInTheTree(node->right, val);}
}



static bool Exists(int arr[], int size, int k)
{
    Tree* tree = new Tree;
    tree = nullptr;

     for(int i = 0; i < size; ++i)
     {
         InsertToTree(tree, arr[i]);
     }

     bool answer = IsInTheTree(tree,k);

     return answer;

     delete tree;
  }
};

我还没有创建对象吗?谢谢您的时间!

编辑: 我在mingw的Windows 10下使用eclipse。我尚未用VS测试过。

1 个答案:

答案 0 :(得分:1)

  

无法调用成员函数'void SearchArray :: InsertToTree(Tree *&,int)

这告诉您InsertToTree()class SearchArray的成员函数。因此,您需要构造SearchArray的实例才能调用该成员函数,例如:

SearchArray mySearchArray; // calls the default constructor, you may need to call a different constructor, i.e. one with arguments
...
for(int i = 0; i < size; ++i)
{
    mySearchArray.InsertToTree(tree, arr[i]);
}

并类似地为SearchArray::IsInTheTree