私は、このように初期化したい構造体を持っている:この構造体を集約初期化する方法は?
checkPoints someCheckpoints = {
{
mPosition(10, 18),
mPosition(15, 20),
},
{
mPosition(45, 80),
mPosition(95, 105),
}
};
基本的位置のベクトルは、アグリゲータを使用して初期化ベクトル。
これは問題なく動作します
std::vector<PosVec> someCheckpoints = {
{
mPosition(10, 18),
mPosition(15, 20),
},
{
mPosition(45, 80),
mPosition(95, 105),
}
};
私はいくつかの追加機能を追加するために構造体を使用する必要がありますが。
マイコード:
struct mPosition {
mPosition(int32_t x, int32_t y) : x(x), y(y) {}
int32_t x;
int32_t y;
};
typedef std::vector<mPosition> PosVec;
struct checkPoints {
explicit checkPoints(std::vector<PosVec>& checkPoints) {
checkPointsVec = checkPoints;
};
const PosVec& getRandom() const {
return checkPointsVec[getRandomInt(0, checkPointsVec.size())];
}
std::vector<PosVec> checkPointsVec;
};
checkPoints someCheckpoints = { // no matching constructor
{
mPosition(10, 18),
mPosition(15, 20),
},
{
mPosition(45, 80),
mPosition(95, 105),
}
};
これはno matching constructor
エラーを生成しています。適切なベクトルのような集約コンストラクタを使用したいと思います。私の構造体は、代わりにベクトルクラス を拡張する必要がありますか、私は自分のコンストラクタ(どちらの)を宣言することができるだろうか?
どうすればこの問題を解決できますか?
explicit' 'と、それは'チェックポイントsomeCheckpoints {..}であろう(非 '=')ない – Jarod42
と 'vector'と余分なブレースが必要になるでしょう。 'initializer_list'はそれを避けるでしょう。 – Jarod42
'const'を追加しても問題は解決しません。 '明示的な'については '{..}'と '= {..}'のどちらかを使うことができます。私は意図的でない暗黙的な変換を避けるために、単一引数のコンストラクタにそのようにマークする必要があるため、これを使用しています。 – Kesse