“Y n'est pas le nom d'un type” d'erreur en C++
Je ne sais pas quoi chercher pour trouver une explication à cela, c'est pourquoi je demande.
J'ai ce code qui signale l'erreur:
struct Settings{
int width;
int height;
} settings;
settings.width = 800; //'settings' does not name a type error
settings.height = 600; //'settings' does not name a type error
int main(){
cout << settings.width << " " << settings.height << endl;
mais si je mets de l'affectation de la valeur en principal, cela fonctionne:
struct Settings{
int width;
int height;
} settings;
main () {
settings.width = 800; //no error
settings.height = 600; //no error
Pouvez-vous m'expliquer pourquoi?
EDIT:
Quant à Ralph Tandetzky réponse, voici mon struct code. Pourriez-vous me montrer comment affecter les valeurs que vous avez fait avec mon extrait de struct?
struct Settings{
struct Dimensions{
int width;
int height;
} screen;
struct Build_menu:Dimensions{
int border_width;
} build_menu;
} settings;
Double Possible de "X n'est pas le nom d'un type" d'erreur en C++ et nom de la Classe n'est pas le nom d'un type en C++
Alors que votre point est correct, j'aime bien le Andy réponse ici la plupart en raison de son simplicty. Aussi thumbs up pour le drôle de changement de titre.
Alors que votre point est correct, j'aime bien le Andy réponse ici la plupart en raison de son simplicty. Aussi thumbs up pour le drôle de changement de titre.
OriginalL'auteur Qwerty | 2013-06-05
Vous devez vous connecter pour publier un commentaire.
Vous ne pouvez pas mettre les affectations à l'extérieur du contexte d'une fonction en C++. Si vous êtes intrigué par le fait que parfois vous vu le
=
symbole utilisé en dehors du contexte d'une fonction, par exemple:C'est parce que la
=
symbole peut être utilisé pour initialisation. Dans votre exemple, vous n'êtes pas initialiser les données membreswidth
etheight
, vous assignez une valeur pour eux.Oh putain, génial. Je suis à l'aide de l'initialisation de trop, donc je n'étais pas comprendre pourquoi cela ne fonctionnait pas, depuis que j'ai eu plusieurs variables avant de cette structure. Donc, pour être clair.
int i = 5;
, maisint i;
suivie pari = 5;
ne marcherait pas?Exactement
pourriez-vous fournir un aperçu sur ce comment. essentiellement sur la "prolongation de la struct".
C'est une question qui serait probablement appel à une réponse distincte - je ne suis pas sûr de comprendre l'OP de la conception, et je n'ai pas le temps de trop y penser maintenant 😉
OriginalL'auteur
En C++11, vous pouvez écrire
afin de fixer votre rapport de bogue. L'erreur s'affiche parce que vous essayez d'attribuer une valeur à l'extérieur du corps d'une fonction. Vous pouvez initialiser, mais de ne pas attribuer de données mondiales en dehors d'une fonction.
EDIT:
Concernant votre montage, il suffit d'écrire
Je ne suis pas sûr à 100%, si cela fonctionne bien, à cause de l'héritage. Je recommande d'éviter l'héritage dans ce cas et écrire le
Dimensions
en tant que membre des données dans votreBuild_menu
structure. L'héritage sera tôt ou tard vous donner toutes sortes d'ennuis, lorsqu'il est utilisé de cette façon. Préférez la composition à l'héritage. Lorsque vous faites cela, il va ressembler àstruct Settings { int width = 10; int height = 20; } settings;
Oh merci, à ce sujet, j'aurais une autre question. La structure que j'ai posté était juste un extrait de mon vrai struct. Je vais mettre à jour ma question, auriez-vous l'obligeance et de voir comment pourrais-je le faire fonctionner à l'aide de cette assignmenet? Je suis à la définition de mon struct au début de mon main.cpp (après comprend bien sûr) c'est donc la première des choses à voir dans mon code. C'est pourquoi je préfère cette valeur assignmenet, au lieu de dans main (), qui est sur le 300e ligne.
c'est juste l'initialisation. thses définir votre struct certaine valeur initiale de sorte que vous savez l'état de ces membres. ensuite, vous pouvez le modifier accoringly dans le programme.\
J'ai édité la question de sorte que vous pouvez voir mon struct code. Depuis que je suis de l'extension d'une structure à l'intérieur d'une structure, comment pourrais-je attribuer des valeurs que vous avez proposé? Aussi je n'aime pas beaucoup la struct Build_menu build_menu chose. Est-il un moyen de le prolonger build_menu avec une option de plus et de ne pas créer une structure pour elle?
attribuer comme je l'ai montré son simple mais fonctionne uniquement en c++11 mode. Ralph méthode peut également être appliquée mais vous devez avoir le corset corset sein de l'initialisation. aussi loin que build_menu chose est concerné si vous voulez "étendre" il pas d'autre option. cela dépend aussi de la conception.
OriginalL'auteur