C++ C++;在CPP文件中实现并在另一个类中使用的结构

C++ C++;在CPP文件中实现并在另一个类中使用的结构,c++,struct,C++,Struct,在一个类中创建结构的最佳方法是什么,在那里实现并在另一个类中使用 Structs.h struct White{ unsigned char r; unsigned char g; unsigned char b; Color() : r(255), g(255), b(255){} }; struct Black{ unsigned char r; unsigned char g; unsigned char b; Color() : r(0),

在一个类中创建结构的最佳方法是什么,在那里实现并在另一个类中使用

Structs.h

struct White{
   unsigned char r;
   unsigned char g;
   unsigned char b;
   Color() : r(255), g(255), b(255){}
};
struct Black{
   unsigned char r;
   unsigned char g;
   unsigned char b;
   Color() : r(0), g(0), b(0){}
};
White white; //works fine

Black black = {255, 255, 255}; //*error: data member initializer is not allowed!* (because of unsigned char maybe?)
**OR**
Black black; black.r = 255; //*error: this declaration has no storage class or type specifier!*
anotherClass.cpp

#include "Structs.h"
Structs *str = new Structs();
str->white.r //works, is 255
str->black.r //should be 255 too

也许我不明白这个问题,但我会说,ctor应该是White():。。。和黑色()。。。否则您的头文件将无法编译。

也许我不理解这个问题,但我会说ctor应该为白色()。。。和黑色()。。。否则您的标题将无法编译。

我认为您的设计有误。将“黑色”和“白色”定义为不同的类,其对象具有RGB值。然后你想要一个有白色值/属性的“黑色”吗?这听起来像是在定义一辆汽车,扯下车轮,给它机翼和320个座位,然后假装波音757仍然是一辆汽车

您通常需要以下内容:

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

Color black = {0,0,0};
Color white = {255,255,255};
Color blue = {0,0,255};

我觉得你的设计不对。将“黑色”和“白色”定义为不同的类,其对象具有RGB值。然后你想要一个有白色值/属性的“黑色”吗?这听起来像是在定义一辆汽车,扯下车轮,给它机翼和320个座位,然后假装波音757仍然是一辆汽车

您通常需要以下内容:

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

Color black = {0,0,0};
Color white = {255,255,255};
Color blue = {0,0,255};

问题在于构造函数,它应该与struct\u name相同。

试一试

struct-White{
无符号字符r;
无符号字符g;
无符号字符b;
White():r(255),g(255),b(255){
无效显示(无效)
{

cout问题在于构造函数,它应该与struct\u name相同。

试一试

struct-White{
无符号字符r;
无符号字符g;
无符号字符b;
White():r(255),g(255),b(255){
无效显示(无效)
{

我可能只是不知道,但这些看起来不像是合法的定义(例如,ctor名称)。行
Black blaqck={255255255};
不会编译,因为您没有定义构造函数,它采用初始值设定项列表。请尝试
Black Black(255255)
instead可能只是无知,但它们看起来不像是合法的定义(例如,ctor名称)。行
Black blaqck={255255255};
不会编译,因为您没有定义构造函数,它采用初始值设定项列表。改为尝试
Black Black(255255);