[英]QVector<T> operator= and operator[]
暑假期间,我正在为朋友们编写程序,但发生了一个非常奇怪的问题。
我在自制模板类中使用operator =将QVector <T>分配给其他QVector <T>,然后尝试检查此第二个QVector <T>是否具有任何元素。 首先,我正在检查它的大小,并且很好,但是当我使用operator []和函数GetName()时,该函数是T类的成员。
这是一些代码:
template <template T> class Turniej {
private:
QVector<T>* list_;
QVector<Stol<T> > stoly_;
int round_;
int max_rounds_;
Turniej() {round_=1;}
public:
static Turniej& GetTurniej() {
static Turniej turniej;
return turniej; }
void SetList(QVector<T> *list) {list_=list; }
QVector<T>& GetList() {return *list_;}
//Some other irrelevant methods
};
然后,我参考填充了2个Gracz类对象的QVector调用SetList()函数
Turniej<Gracz>::GetTurniej().SetList(&list)
当我最终尝试通过以下代码到达Turniej类中的list_对象时,出现以下错误:QVector :: operator []中的ASSERT失败:“索引超出范围”,文件... / QtCore / qvector .h,第356行
qDebug()<<Turniej<Gracz>::GetTurniej().GetList()[0].GetName();
其中GetName()返回一些QString,并且肯定该方法存在于Gracz类中。
我真的很感谢您的帮助,因为我坚持使用了2天,完全不知道发生了什么。 奇怪的是,我正在尝试搜索该错误,但在qvector.h的特定行中没有发现任何有错误的主题。 我在Qt Creator中使用Qt 5.0.2
谢谢你的帮助!
更改list_=list;
到list_ = new QVector(list)
。 也许您的向量在班级以外的地方被修改了? 您只是保持引用给您的方法的向量,似乎复制就是您想要的。
更新
我看你的课是单身。 始终记得在使类成为单例之前要三思而后行-这不是您想要在代码中包含的内容,应尽可能避免这样做。
当您调用SetList时,您是在转让列表的所有权,是否确定以后不删除它(或不自动删除它)?
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.