0

夏休みに友達のためにプログラムを書いているのですが、とても奇妙な問題が発生しました。

自家製のテンプレート クラスで 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 を使用しています

助けてくれてありがとう!

4

2 に答える 2

0

に変更list_=list;list_ = new QVector(list)ます。ベクトルがクラス外のどこかで変更されている可能性がありますか? メソッドに指定されたベクトルへの参照を保持しているだけです。コピーが必要なようです。

更新されまし
た。あなたのクラスはシングルトンです。クラスをシングルトンにする前に、常によく考えることを忘れないでください。これは、コードに含めたくないものであり、可能な限り回避する必要があります。

于 2013-07-11T11:55:07.400 に答える