在头文件中定义并在cpp中实现的C ++结构

时间:2013-04-03 12:06:35

标签: c++ struct implementation

我怎样才能确保我在另一个类中使用它时实现的某些颜色保持其价值?

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

3 个答案:

答案 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;