4

当你在另一个类中使用它时,我如何确保我实现的 somecolor 保持他的价值?

结构体.h

struct Color{
   unsigned char r;
   unsigned char g;
   unsigned char b;
};
Color someColor;
//if i define the color here it says...:
Color someColor = {255,255,255}; //error: data member inializer not allowed

结构体.cpp

struct::Color someColor = {255,255,255};

其他类.cpp

struct *str = new struct();
str->someColor.r //is not the correct value /not set
4

3 回答 3

6

您需要在标题中声明它:

extern Color someColor;

并在 .cpp 文件中定义它:

Color someColor = {255, 255, 255};

旁注,您的语法struct::Color具有高度误导性。它被解析为struct ::Color,并且在 C++ 术语中,它等同于::Color或只是Color(除非您在命名空间内)。

于 2013-04-03T12:09:21.077 回答
4

为了使它成为有效的 C++,我将把你重命名struct为。mystruct似乎您想提供一个默认构造函数mystruct,将其someColor成员初始化为{255,255,255}. 在 C++11 之前,您必须这样做:

mystruct::mystruct()
{
  someColor.r = 255;
  someColor.g = 255;
  someColor.b = 255;
}

或者,如果您提供Color一个接受 3 个值的构造函数,您可以这样做:

mystruct::mystruct()
  : someColor(255, 255, 255)
{ }

但是,在 C++11 中,您可以在成员初始化列表中进行聚合初始化,因此您无需提供mystruct构造函数:

mystruct::mystruct()
  : someColor{255, 255, 255}
{ }

事实上,在 C++11 中,您可以像尝试做的那样在类定义中初始化非静态非常量成员:

Color someColor = {255, 255, 255};
于 2013-04-03T12:11:45.203 回答
4

你应该这样写:

struct.h

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

结构体.cpp

#include "struct.h"    
Color someColor = {255,255,255};

其他类.cpp

#include "struct.h"
Color newColor;
newColor.r = someColor.r;
于 2013-04-03T12:25:38.383 回答