【问题标题】:Create an object within a member function在成员函数中创建对象
【发布时间】:2019-10-24 20:41:56
【问题描述】:

在成员函数中创建对象 萨瓦斯·第12讲 · 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;
  }
};

我不是已经创建了一个对象吗?感谢您的宝贵时间!

编辑: 我在 windows 10 下使用 eclipse 和 mingw。我没有用VS测试过。

【问题讨论】:

  • 我原以为这是“指向成员函数的指针”(重复)的问题,但无法从这个 sn-p 中分辨出来。试图重现......不,当我存根 Tree 和这两种方法时编译正常。
  • 你问题的第一行和标题中的“SS”是什么意思?
  • 如果 InsertToTree 是 Tree 的成员,您需要调用 tree->InsertToTree(arr[i]) 虽然这在 nullptr 上不起作用。不要新建/删除,只需创建一个像这样的临时树:“树树;”当它超出范围时(当你退出函数时)它将被破坏

标签: c++ class


【解决方案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

【讨论】:

  • 谢谢你这样做。我不知道你可以在它自己的类中实例化一个类对象。这是递归的一部分吗? (这里是初学者)
  • 你的问题是 Existsstatic 所以它没有 this 指针。它不应该是static,或者您需要创建SearchArray 的实例才能调用SearchArray 的非static 成员函数。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-10-04
  • 2020-11-19
  • 1970-01-01
  • 2020-01-25
  • 2017-11-29
相关资源
最近更新 更多