gpt4 book ai didi

c++ - 对类型 'Item *const' 的引用无法绑定(bind)到类型 'const Item *' 的右值

转载 作者:搜寻专家 更新时间:2023-10-31 00:53:17 24 4
gpt4 key购买 nike

我尝试从一个没有 const 项的列表中抑制一个 const 项指针:

#include <QString>
#include <QList>

class Item {
public:
Item(QString name) : _name(name) {
}
private:
QString _name;
};

class Product {
public:
Product(const Item * item) : _item(item) {
}

const Item * item() {
return _item;
}

void setItem(const Item * item) {
_item = item;
}
private:
const Item * _item;
};

int main() {
QList<Item*> listOfNonConstItem;
listOfNonConstItem.append(new Item("a"));
listOfNonConstItem.append(new Item("b"));

Product product(listOfNonConstItem.first());
listOfNonConstItem.removeOne(product.item());

return 0;
}

不幸的是,编译器失败了:

/path/to/main.cpp:34:31: error: reference to type 'Item *const' could not bind to an lvalue of type 'const Item *'
editableList.removeOne(pC);
^~
/path/to/Qt/5.6.3/clang_64/lib/QtCore.framework/Headers/qlist.h:201:29: note: passing argument to parameter 't' here
bool removeOne(const T &t);
^

我不明白为什么会出现问题,因为 removeOne() 参数是 const

最佳答案

您混淆了 const指针和指向const的指针.

什么 removeOne期望是指针(即 Item* );对于参数声明,const在指针而不是指针上是合格的(即 Item* const & ,引用 const 指针到非常量 Item )。虽然您传递的是指向 const 的指针(即 const Item* ),不能隐式转换为指向非常量的指针。

更改 pC 的类型至 Item*Item* const会解决问题。

关于c++ - 对类型 'Item *const' 的引用无法绑定(bind)到类型 'const Item *' 的右值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49272018/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com