1

エラーをスローせずに混乱している次の2つのコードがあります。

最初の部分は、配列にプッシュしようとしているカスタムクラスからのものです。

class idRect {
    public:
        sf::FloatRect rect;
        int id;

        idRect(int _id, sf::FloatRect _rect) : id(_id), rect(_rect) {}
};

2番目の部分は、関数が呼び出される場所です。

if((deltaX + deltaY) < 500) { //Taxi distance calculation
    cout << endl << "Passed check" << endl;
    gloAreas.push_back(idRect(id, entity.getGlobalBounds()));
}

gloAreasは、idRectオブジェクトを含むグローバルに定義されたベクトルです。

前に述べたように、コンソールから「Passed check」が出力され、ベクトルのサイズがEDIT:グローバルに増加しないことを確認しました。

編集:エラーもかなりランダムに見え、push_back関数を呼び出すオブジェクトの6つのインスタンスのうち1つでのみ発生します。

私はsf::FloatRectにSFMLを使用しています。これは基本的に4つのfloatのベクトルです。getGlobalBounds()は、スプライトの境界矩形をsf::FloatRect形式で返すSFMLの別の関数です。

何がうまくいかないかについてのアイデアはありますか?

よろしくお願いいたします。BarrensZeppelin

編集2:私自身の無能さとstd :: multisetの並べ替えが混在しているため、エラーが発生したようです。別のスレッドで戻ってくるかもしれません^^(sscce ofcを使用)ありがとうございました。ヘルプ。

4

2 に答える 2

3

gloAreasがとして定義されている場合、それは真のグローバルstaticではありません。グローバルスコープがありますが、翻訳単位ごとにコピーが作成されます。

グローバルの場合は、で宣言しextern、単一の実装ファイルで定義する必要があります。

免責事項:答えは単なる推測です、私の水晶玉は今日オフになっている可能性があります...

于 2012-11-27T20:49:37.207 に答える
1

私の水晶玉の答え:あなたはgloAreas次のように内部スコープで再定義しました:

vector<idRect> gloAreas; // defines global

void F( vector<idRect> gloAreas ) // defines local instance
{
  gloAreas.push_back(); // affects local instance
  return;               // destroys local instance 
}
int main() {
  F(gloAreas); // Copies global instance to parameter
               // global remains unchanged.
}
于 2012-11-27T21:04:03.623 に答える