夏休みに友達のためにプログラムを書いているのですが、とても奇妙な問題が発生しました。
自家製のテンプレート クラスで operator= を使用して QVector< T > を他の QVector< T > に割り当ててから、この 2 番目の QVector< T > に要素があるかどうかを確認しようとしています。まず、サイズを確認していて問題ありませんが、クラス T のメンバーである operator[] と関数 GetName() を使用すると.
ここにいくつかのコードがあります:
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
};
次に、Gracz クラスの 2 つのオブジェクトで満たされた QVector を参照して SetList() 関数を呼び出します。
Turniej<Gracz>::GetTurniej().SetList(&list)
最終的に以下のコードで Turniej クラスの list_ オブジェクトにアクセスしようとすると、次のエラーが発生します: QVector::operator[]: "index out of range", file .../QtCore/qvector での ASSERT 失敗.h、356行目
qDebug()<<Turniej<Gracz>::GetTurniej().GetList()[0].GetName();
GetName() は QString を返しますが、そのメソッドが Gracz クラスに存在することは確かです。
2日間立ち往生していて、何が起こっているのかまったくわからないので、助けていただければ幸いです。奇妙なことに、そのエラーをグーグルで検索しようとしましたが、qvector.h の特定の行にエラーのあるトピックは見つかりませんでした。Qt Creator で Qt 5.0.2 を使用しています
助けてくれてありがとう!