【问题标题】:Cannot dereference double pointer, " no match for operator* "无法取消引用双指针,“运算符* 不匹配”
【发布时间】:2021-02-12 02:36:33
【问题描述】:

我正在尝试搜索指向 Shape 类对象的指针数组。我已经编写了以下代码。但是,我收到此错误:“与运算符* 不匹配”,我不知道从哪里开始。任何帮助表示赞赏。

Shape** shapesArray;

bool doesNameExist(string name) {
    for (int i = 0; i < shapeCount; i++)
    {
        if(*(shapesArray[i])->getName() == name)
        {
            return true;
        }
        else
        {
            return false;
        }
    }

}

【问题讨论】:

  • [i]首先取消引用。 -&gt; 进行第二次取消引用。 * 正在尝试取消引用 getName() 返回的内容。
  • 请解释您认为if(*(shapesArray[i])-&gt;getName() == name) 做了什么。
  • 如果想避免这样的麻烦,请使用std::arraystd::vector
  • 无论判断结果如何,在循环的第一次迭代中也返回看起来很奇怪。
  • 尝试在点运算符中多使用一个括号。也许它有助于像这样的声明if((*(shapesArray[i])).getName() == name)

标签: c++ operator-keyword dereference double-pointer


【解决方案1】:
  • shapesArrayShape**

  • shapesArray[i]Shape*

  • (shapesArray[i])-&gt;getName() 正在取消引用 shapesArray[i] 并调用其 会员getName

到目前为止没有任何问题。我想这是你真正想要得到的,但你添加了另一个*

  • *(shapesArray[i])-&gt;getName() 尝试取消引用从 getName 返回的内容(也许是 std::string?)

PS:无论哪种情况,您都会在第一次迭代中从循环中返回。如果你想在数组中搜索,你需要循环直到找到它(然后是return true)或循环到最后(然后循环之后是return false,因为它没有找到)。

【讨论】:

    猜你喜欢
    • 2014-01-12
    • 1970-01-01
    • 1970-01-01
    • 2016-05-19
    • 1970-01-01
    • 2016-12-01
    • 2012-01-04
    • 2021-10-24
    相关资源
    最近更新 更多