我怎样才能确保我在另一个类中使用它时实现的某些颜色保持其价值?
struct.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
struct.cpp
struct::Color someColor = {255,255,255};
someotherclass.cpp
struct *str = new struct();
str->someColor.r //is not the correct value /not set
答案 0 :(得分:6)
你需要在标题中声明:
extern Color someColor;
和在.cpp文件中定义:
Color someColor = {255, 255, 255};
旁注,您的语法struct::Color
极具误导性。它被解析为struct ::Color
,并且在C ++术语中,它等同于::Color
或仅Color
(除非您在命名空间内)。
答案 1 :(得分:4)
我要将struct
重命名为mystruct
,以使其成为有效的C ++。您似乎想为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中,您可以像在尝试的那样初始化类定义中的非静态非const成员:
Color someColor = {255, 255, 255};
答案 2 :(得分:4)
你应该这样写:
的 struct.h 强>
struct Color{
unsigned char r;
unsigned char g;
unsigned char b;
};
extern Color someColor;
<强> struct.cpp 强>
#include "struct.h"
Color someColor = {255,255,255};
<强> someotherclass.cpp 强>
#include "struct.h"
Color newColor;
newColor.r = someColor.r;