C++ les structures définies dans l'en-tête et mis en œuvre en rpc
Comment puis-je m'assurer que le somecolor que je mettre en œuvre conserve sa valeur lorsque vous l'utilisez dans une autre classe?
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
S'il vous plaît montrer le code réel. Vous ne pouvez pas avoir un
À en juger par la dernière ligne, je pense qu'il nous manque l'essentiel des informations que
struct
appelé struct
.À en juger par la dernière ligne, je pense qu'il nous manque l'essentiel des informations que
someColor
est un membre d'une classe, pas une variable globale. Pour répondre à la question, nous aurons besoin de savoir (a) si c'est effectivement le cas; et (b) qu'il devrait y avoir une seule instance de il associé à la classe elle-même (un membre statique) ou avec chaque objet séparément (un non-membre statique).OriginalL'auteur Sebastiaan van Dorst | 2013-04-03
Vous devez vous connecter pour publier un commentaire.
Vous devez déclarer dans l'en-tête:
et définir dans le .fichier cpp:
Note de côté, votre syntaxe
struct::Color
est très trompeuse. C'est analysée commestruct ::Color
, et en C++, il est équivalent à::Color
ou tout simplementColor
(sauf si vous êtes à l'intérieur d'un espace de noms).OriginalL'auteur Angew
Je vais renommer votre
struct
àmystruct
pour le plaisir de faire qu'il valide en C++. Il semble que vous voulez fournir un constructeur par défaut pourmystruct
qui initialise sessomeColor
membre de{255,255,255}
. Avant C++11, vous auriez à le faire comme ceci:Alternativement, si vous donnez
Color
un constructeur qui prend 3 valeurs, vous pourriez faire ceci:Toutefois, en C++11, vous pouvez faire agrégation d'initialisation dans la liste d'initialisation de membre, de sorte que vous n'avez pas besoin de donner
mystruct
constructeur:En fait, en C++11, vous êtes autorisé à initialiser non-statique non-const membres à l'intérieur de la définition de classe que vous avez essayé de le faire:
OriginalL'auteur Joseph Mansfield
Vous devriez l'écrire comme ceci:
struct.h
struct.cpp
someotherclass.cpp
OriginalL'auteur Snail