繁体   English   中英

Q向量 <T> operator =和operator []

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM