我被指向常量QList of pointers to Foo
的指針卡住了。我將指針從Bar
對象傳遞到myListOfFoo
到Qux
。我使用const指針來防止在Bar
類之外進行任何更改。問題是我仍然可以修改ID_
執行setID
在Qux::test()
。Qt4 C++指向常量Q指針的列表
#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常量* - 不要在堆上創建Qt容器,它們會被共享(寫時複製)。只需通過值/ const引用傳遞它們即可。 –
2010-10-12 13:47:06
@Frank謝謝你的建議,但是你能否詳細說明一下如何去做。恐怕我的編程技能不夠強大,無法理解你的想法:)。 – Moomin 2010-10-12 13:51:17
如果你想從你的內部QList QList ,你所能做的就是創建一個新的列表並手動添加指針。 QList list()const {QList cl;/* loop/append ... */return cl; }。或保留多個列表。 –
2010-10-12 13:52:08