1

複数の構造体を、設定を変えて作りたい…!それらはすべて同じ変数 (同じ名前など) を保持しています! しかし、異なる実装!そして、この設定は別のクラスから到達できるはずです...これが最善の方法ですか? それとも私は何か完全に間違っていますか?

あ:

class A
{
};

struct Color{
   unsigned char r;
   unsigned char g;
   unsigned char b;
};

extern struct Settings settings;

A.cpp

struct settings{
   Color firstcolor = {0,0,0}; //error: data member initializer is not allowed
   Color secondcolor = {255,255,255}; //error: data member initializer is not allowed
};
struct anothersettings{
   Color firstcolor = {255,255,255}; //error: data member initializer is not allowed
   Color secondcolor = {0,0,0}; //error: data member initializer is not allowed
};

B.cpp

#include "A.h"
dosomethingwith(settings);
4

1 に答える 1

3

structタイプとそのタイプのオブジェクトの間で混乱しているようです。a の要点は、structそのタイプのオブジェクトがどのように見えるかを説明することです。( と で行ったように)structまったく同じメンバーを持つ2 つの を作成している場合は、おそらく大きな間違いを犯しています。代わりに、そのタイプのオブジェクトを1 つ、次に複数持つ必要があります。settingsanothersettingsstruct

struct Settings次のようなシングルを持っている方がはるかに良いでしょう:

struct Settings {
  Color firstcolor;
  Color secondcolor;
};

次に、適切な色を設定して、このタイプのオブジェクトを作成できます。

Settings settings1;
settings1.firstcolor.r = 0;
settings1.firstcolor.g = 0;
// And so on...

Settings settings2;
settings2.firstcolor.r = 255;
settings2.firstcolor.g = 255;
// And so on...

実際、集計の初期化を使用してこれを記述する、より優れた方法があります。

Settings settings1 = {{0, 0, 0}, {255, 255, 255}};
Settings settings2 = {{255, 255, 255}, {0, 0, 0}};

Settings次に、引数を取る関数を作成できます。

void soSomething(Settings);

次のように呼び出すことができます。

doSomething(settings1);
// or
doSomething(settings2);
于 2013-04-08T14:28:30.533 に答える