2016-07-01 63 views
4

まず、私はC++には全く新しいので、私が挑戦しようとしていることを説明するために擬似コードおよび/ do ...C++で座標セットの配列を格納する(ペアのベクトルのベクトル?)

複数のスプライトのアニメーションの各フレームにX座標とY座標のペアを格納しようとしています。

animationFrames[PLAIN][0] = { 20, 50 } 
animationFrames[PLAIN][1] = { 25, 55 } 

エトセトラ:(列挙型を使用して)そのPLAIN == 1を想定して - 私は、これは以下のようなものであることを想定しました。私は本質的に問題のスプライトのIDでanimationFramesを照会し、反復処理するX、Y座標のセットを受け取ることができるようにしたいと考えています。私はこれがかなり難しいと思っています。ここでは動作しません。私の試みは、

...

std::vector< std::vector< std::pair<int, int> > > frames = { 
    { 
     { 1, 1 }, { 2, 2 } // two frames for sprite A 
    }, 
    { 
     { 3, 3 }, { 4, 4 } // two frames for sprite B 
    } 
}; 
だこれは、結果、次のエラーメッセージ

prog.cpp: In function 'int main()': 
prog.cpp:15: error: braces around initializer for non-aggregate type 'std::vector<std::vector<std::pair<int, int>, std::allocator<std::pair<int, int> > >, std::allocator<std::vector<std::pair<int, int>, std::allocator<std::pair<int, int> > > > >' 

私はベクトル、ペア、および配列の様々な変異を試してみたが、私はすることができますそれを理解しているようだ。

ありがとうございます!

+0

あなたがコンパイルエラーを取得している場合は、エラーを含むべきですメッセージ。 :) – davmac

+0

良い点!私は何か不可能なことをしようとしていたと思っていました...しかし、ここに行く: 'prog.cpp:In function 'int main()': prog.cpp:15:エラー:非集約型 'std ::ベクトルstd :: vector :: std :: pair 、std :: allocator >、std :: allocator 、std :: allocator >>> '' – Benwithjamin91

+0

いいえ、質問に含めてください_! (エラーメッセージが含まれるように質問を編集してください)。 – davmac

答えて

1

あなたのコンパイラはおそらくC++ 11標準を処理できないと思います。つまり、中括弧の初期化はサポートされていません。

std::vector<std::vector<std::pair<int, int> > > frames(2); 
std::vector<std::pair<int, int> > &v1 = frames[0]; 
v1.push_back(std::pair<int, int>(1, 1)); 
v1.push_back(std::pair<int, int>(2, 2)); 
std::vector<std::pair<int, int> > &v2 = frames[1]; 
v2.push_back(std::pair<int, int>(3, 3)); 
v2.push_back(std::pair<int, int>(4, 4)); 

これは非常に醜いですが、動作するはずです。一方で、あなたのコンパイラがC++ 11をサポートしている場合、あなたも=を必要はありません、あなたは、いくつかの空白を削除することができます。

std::vector<std::vector<std::pair<int, int>>> frames { 
    { 
     { 1, 1 }, { 2, 2 } // two frames for sprite A 
    }, 
    { 
     { 3, 3 }, { 4, 4 } // two frames for sprite B 
    } 
}; 
関連する問題