C ++可以从其他类调用的多个实例结构

时间:2013-04-08 14:22:55

标签: c++ struct extern

我想制作多个结构,具有不同的设置......!它们都拥有相同的变量(相同的名称等)!但不同的实施!这个设置应该可以从另一个班级到达......这是最好的方法吗?或者我做错了什么?

A.H:

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);

1 个答案:

答案 0 :(得分:3)

似乎你在struct类型和该类型的对象之间感到困惑。 struct的重点在于它描述了该类型的对象的外观。如果您创建两个struct成员完全相同(就像您使用settingsanothersettings所做的那样),那么您可能犯了一个大错误。相反,您应该只有一个struct,然后是该类型的多个对象。

如果只有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);