Qt4 C++ Pointer to const QList of pointers
Posted
技术标签:
【中文标题】Qt4 C++ Pointer to const QList of pointers【英文标题】: 【发布时间】:2010-10-12 12:50:22 【问题描述】:我被指向 const QList of pointers to Foo
的指针卡住了。我将指向myListOfFoo
的指针从Bar
对象传递给Qux
。我使用指向 const 的指针来防止在 Bar
类之外进行任何更改。问题是我仍然可以修改ID_
在Qux::test()
中执行setID
。
#include <QtCore/QCoreApplication>
#include <QList>
#include <iostream>
using namespace std;
class Foo
private:
int ID_;
public:
Foo()ID_ = -1; ;
void setID(int ID) ID_ = ID; ;
int getID() const return ID_; ;
void setID(int ID) const cout << "no change" << endl; ;
;
class Bar
private:
QList<Foo*> *myListOfFoo_;
public:
Bar();
QList<Foo*> const * getMyListOfFoo() return myListOfFoo_;;
;
Bar::Bar()
this->myListOfFoo_ = new QList<Foo*>;
this->myListOfFoo_->append(new Foo);
class Qux
private:
Bar *myBar_;
QList<Foo*> const* listOfFoo;
public:
Qux() myBar_ = new Bar;;
void test();
;
void Qux::test()
this->listOfFoo = this->myBar_->getMyListOfFoo();
cout << this->listOfFoo->last()->getID() << endl;
this->listOfFoo->last()->setID(100); // **<---- MY PROBLEM**
cout << this->listOfFoo->last()->getID() << endl;
int main(int argc, char *argv[])
QCoreApplication a(argc, argv);
Qux myQux;
myQux.test();
return a.exec();
以上代码的结果是:
-1
100
而我想要实现的是:
-1
no change
-1
当我使用QList<Foo>
而不是QList<Foo*>
时没有这样的问题,但我需要在我的代码中使用QList<Foo*>
。
感谢您的帮助。
【问题讨论】:
QList应该是:
QList<const Foo *>* listOfFoo;
【讨论】:
如果我这样做,我需要在其他行中将QList<Foo*> *
更改为 QList<const Foo *>*
以避免编译错误:无法将 'const QList您可以使用QList<Foo const *> const *
,这意味着您不能修改列表或列表的内容。问题是没有简单的方法从QList<Foo*>
中检索该列表,因此您需要将其添加到您的Bar
类中。
【讨论】:
【参考方案3】:如果你真的必须返回指针,请将其转换为包含指向常量元素的指针的 QList:
QList<const Foo*> const* getMyListOfFoo()
return reinterpret_cast<QList<const Foo*> *>(myListOfFoo_);;
在 Qux listOfFoo 中也应该包含指向常量元素的指针:
QList<const Foo*> const* listOfFoo;
【讨论】:
实际上我认为您的解决方案可能有问题,因为在输入“QList以上是关于Qt4 C++ Pointer to const QList of pointers的主要内容,如果未能解决你的问题,请参考以下文章
C++ 和 QT4.5 - 传递 const int& 过大?通过引用传递是不是有助于信号/插槽?
常量指针(pointer to constant)和指针常量(constant pointer)