我正在写我的朋友在我的夏季时间的程序,我发生了真正奇怪的问题。QVector <T>运营商=和运营商[]
我分配QVector < T>到其他QVector < T>与运营商=在我自制的模板类,然后尝试检查whethere这第二QVector < T>有任何元素。首先,我检查它的大小和它的好,但是当我使用操作符[]和功能的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
};
然后我调用SETLIST()参考QVector充满Gracz类的2个对象功能
Turniej<Gracz>::GetTurniej().SetList(&list)
而当我终于试图去通过下面的代码Turniej类list_对象,我得到这个错误: ASSERT失败在QVector :: operator []中:“索引超出范围”,文件... /QtCore/qvector.h,线356
qDebug()<<Turniej<Gracz>::GetTurniej().GetList()[0].GetName();
凡getName()返回一些QString的并且对于某些该方法在Gracz类存在。
我真的很感激任何帮助,因为我坚持了2天,完全不知道发生了什么事情。奇怪的是,我试图谷歌那个错误,但我没有发现任何有关qvector.h特定行中的错误的主题。 我使用Qt 5.0.2与Qt Creator
感谢您的帮助!
你为什么要用指针处理QVector?我的猜测是,当你访问它时,指针是无效的。只需使用一个普通的QVector。 –
将引用返回给解除引用的指针是一个坏主意,你可以解引用NULL或未初始化的指针! – WoJo
我确实改变了指向普通QVectors的指针,并试图在listList()函数中使用operator = list_ = list'并且仍然一样 – Theoden91