C++ structs definiert im header und umgesetzt cpp
Wie kann ich sicherstellen, dass das somecolor, die ich umsetzen behält seinen Wert, wenn Sie es in einer anderen Klasse?
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
Bitte zeigen Sie echten code. Man kann nicht ein
Ausgehend von der letzten Zeile, ich denke, uns fehlt die wichtige information, dass
struct
genannt struct
.Ausgehend von der letzten Zeile, ich denke, uns fehlt die wichtige information, dass
someColor
ist ein Mitglied einer Klasse, nicht um eine Globale variable. Um die Frage zu beantworten, müssen wir wissen, (a) wenn das tatsächlich der Fall ist; und (b) ob es es sollte nur eine Instanz von Ihr im Zusammenhang mit der Klasse selbst (static-member) oder mit jedem Objekt einzeln (eine nicht-statische member).InformationsquelleAutor Sebastiaan van Dorst | 2013-04-03
Du musst angemeldet sein, um einen Kommentar abzugeben.
Müssen Sie erklären es in der Kopfzeile:
und definieren es in der .cpp-Datei:
Seite beachten Sie, dass Ihre syntax
struct::Color
ist höchst irreführend. Es analysiert, wiestruct ::Color
, und in C++ ausgedrückt ist es äquivalent zu::Color
oder nurColor
(es sei denn, Sie sind in einem namespace).InformationsquelleAutor Angew
Werde ich umbenennen
struct
zumystruct
für den Willen, dass es gültiges C++. Es scheint, wie Sie möchten, um eine Standard-Konstruktor fürmystruct
, initialisiert seinesomeColor
Mitglied{255,255,255}
. Pre-C++11, Sie würden zu tun haben, wie diese:Alternativ, wenn Sie
Color
einen Konstruktor, 3 Werte, Sie könnten dies tun:Jedoch in C++11 können Sie tun, Aggregat-Initialisierung der member-Initialisierungs-Liste, so dass Sie nicht brauchen, zu geben
mystruct
einen Konstruktor:In der Tat, in C++11 sind Sie erlaubt, initialisieren Sie den nicht-statischen, nicht-const-Mitglieder innerhalb der definition der Klasse, wie Sie versucht haben, zu tun:
InformationsquelleAutor Joseph Mansfield
Sollten Sie schreiben es wie folgt:
struct.h
struct.cpp
someotherclass.cpp
InformationsquelleAutor Snail