0
Brixpath::Brixpath(){
{    _animationOptions = (AnimationOptions){5, 3, 40, 30}; 
};

このコード ブロックを実行すると、VS でエラーが発生します

タイプ名は AnimationOptions では許可されていません。

タイプ名を削除すると

Brixpath::Brixpath(){
{    _animationOptions = {5, 3, 40, 30}; 
};

VS2010は、2行目の最初の「{」でエラーを出します

エラー: 式が必要です

アニメーション オプションの定義は次のとおりです。

struct AnimationOptions {
int maxClicks; //how many clicks animation on screen to support
int step; // animation speed, 3 pixels per time
int limit; //width of animation rectangle. if more, rectangle dissapears
int distance; //minimum distance between previous click and current
};

このエラーを解決するにはどうすればよいですか? 助けてください。

4

3 に答える 3

2

VS 2010 のユーザー (つまり、C++11 の均一な初期化を使用できない) を考えると、構造体にコンストラクターを追加し、それを使用して構造体を初期化することをお勧めします。

struct AnimationOptions {
    int maxClicks; //how many clicks animation on screen to support
    int step; // animation speed, 3 pixels per time
    int limit; //width of animation rectangle. if more, rectangle dissapears
    int distance; //minimum distance between previous click and current

    AnimationOptions(int maxClicks, int step, int limit, int distance) : 
        maxClicks(maxClicks), step(step), limit(limit), distance(distance) {}
};

Brixpath::Brixpath() : _animationOptions(5, 3, 40, 30) {}

AnimationOptions を POD として維持する必要がある場合は、メンバーごとの初期化ではなく、波括弧付きの初期化を使用してコードを少し簡略化できると思います。

AnimationOptions make_ao(int clicks, int step, int limit, int distance)
{
  AnimationOptions ao = {clicks, step, limit, distance};
  return ao;
};
于 2013-07-31T06:26:13.200 に答える
2

これは機能し、推奨されるオプションです (C++11 が必要):

Brixpath::Brixpath() : _animationOptions{5, 3, 40, 30}
{
};

ここでは、コンストラクターの本体で値を代入する代わりに、コンストラクターの初期化リストで初期化します。 _animationOptions

C++11 がサポートAnimationOptionsされていない場合は、コンストラクターを指定するか (この場合、コンストラクターは POD ではなくなります)、または要素ごとに設定することができます。これが問題になる場合は、初期化関数を作成することもできます。

AnimationOptions make_ao(int clicks, int step, int limit, int distance)
{
  AnimationOptions ao;
  ao.maxClicks = clicks;
  ao.step = step;
  ....
  return ao;
};

それで

Brixpath::Brixpath() : _animationOptions(make_ao(5, 3, 40, 30))
{
};

これはAnimationOptionsPOD として保持され、コンストラクター コードから初期化を分離します。

于 2013-07-31T06:19:09.963 に答える