La résolution de “seulement static const partie intégrante de membres de données peuvent être initialisées dans une classe” erreur de compilation
Suivantes pour la création d'un Objet Global est entraînant des erreurs de compilation.
#include "stdafx.h"
#include <iostream>
using namespace System;
using namespace std;
#pragma hdrstop
class Tester;
void input();
class Tester
{
static int number = 5;
public:
Tester(){};
~Tester(){};
void setNumber(int newNumber)
{
number = newNumber;
}
int getNumber()
{
return number;
}
}
Tester testerObject;
void main(void)
{
cout << "Welcome!" << endl;
while(1)
{
input();
}
}
void input()
{
int newNumber = 0;
cout << "The current number is " << testerObject.getNumber();
cout << "Change number to: ";
cin >> newNumber;
cout << endl;
testerObject.setNumber(newNumber);
cout << "The number has been changed to " << testerObject.getNumber() << endl;
}
Voici les erreurs de compilation:
1>------ Build started: Project: test, Configuration: Debug Win32 ------
1>Compiling...
1>test.cpp
1>.\test.cpp(15) : error C2864: 'Tester::number' : only static const integral data members can be initialized within a class
1>.\test.cpp(33) : error C2146: syntax error : missing ';' before identifier 'testerObject'
1>.\test.cpp(33) : error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
1>.\test.cpp(49) : error C2039: 'getNumber' : is not a member of 'System::Int32'
1> c:\windows\microsoft.net\framework\v2.0.50727\mscorlib.dll : see declaration of 'System::Int32'
1>.\test.cpp(55) : error C2039: 'setNumber' : is not a member of 'System::Int32'
1> c:\windows\microsoft.net\framework\v2.0.50727\mscorlib.dll : see declaration of 'System::Int32'
1>.\test.cpp(57) : error C2039: 'getNumber' : is not a member of 'System::Int32'
1> c:\windows\microsoft.net\framework\v2.0.50727\mscorlib.dll : see declaration of 'System::Int32'
1>Build log was saved at "file://c:\Users\Owner\Documents\Visual Studio 2008\Projects\test\test\Debug\BuildLog.htm"
1>test - 6 error(s), 0 warning(s)
========== Build: 0 succeeded, 1 failed, 0 up-to-date, 0 skipped ==========
- Comment puis-je créer une Classe Globale
Objet correctement, comme j'ai tenté
ici. - Et comment puis-je régler ce problème "seulement statique
const partie intégrante de membres de données peut être
initialisé au sein d'une classe" - Et, fondamentalement, comment puis-je corriger le reste
des erreurs afin que je puisse obtenir ce à
compiler?
J'ai, comme la déclaration Mondiale Classe les Objets à portée de fichier (j'ai, comme la déclaration de toutes les variables globales à la portée de fichier) parce que quand je créer des fichiers source et de faire "extern" et tout ce que cela devient extrêmement compliqué et ne fonctionne jamais pour moi. Bien que, je ne veux comprendre comment le faire finalement... il me semble qu'à chaque tutoriel, je regarde ne compile pas bien, et qu'il compile je n'ai aucune idée de comment recréer!
Si je peux obtenir cette compiler...alors je peux réussir à apprendre comment faire cela. Donc, si quelqu'un peut réécrire le ci-dessus à l'endroit où elle a littéralement des copies & colle dans Visual C++ Express 2008 et les travaux je vais enfin être en mesure de comprendre comment le recréer. Je suis très contente de voir le correctif de ce! C'est juste que je ne peux pas obtenir des Objets Globaux à l'œuvre! Toutes les autres informations sur le déclarant Mondial les Objets de la Classe...ou quelque chose d'autre est la bienvenue!
- Vous êtes conscient que votre code est compilé en C++/CLI, droit? Qui est, l' .NET variante de C++. Sauf que c'est précisément ce que vous voulez, vous devriez probablement désactiver. Créer un Projet Win32 place.
- double possible de Pourquoi ne puis-je pas avoir un non-intégrale static const membre dans une classe?
Vous devez vous connecter pour publier un commentaire.
Juste de commencer à se pencher sur les erreurs une par une. Beaucoup d'erreurs sont juste en cascade à partir de la première des erreurs, de sorte qu'il semble qu'il y a beaucoup de problèmes quand il ya seulement un couple. Juste commencer par le haut:
Vous ne pouvez pas initialiser un membre dans la définition de classe, sauf si elle est statique, const, et l'un des types intégraux. Laissez le "
= 5
" arrêt de la déclaration denumber
. Ensuite, vous aurez besoin d'avoir une définition deTester::number
en dehors de la définition de la classe, comme suit:Problème n ° 2:
Presque exactement ce qu'il dit (il manque le point-virgule erreurs peut être un peu inexact de dire où le point-virgule doit être) - vous avez besoin d'un point-virgule après la définition de la
Tester
classe.Corriger ces et votre problème de compilation de s'en aller.
La clé, c'est d'essayer et de prendre des erreurs de compilation à partir du haut. Si vous obtenez plus de 3 d'entre eux, vous pouvez probablement ignorer tout ce qui est après la 3e ou alors parce que l'erreur initiale juste cause les compiler dans les mauvaises herbes (et si elles sont réelles des erreurs, il va se montrer de nouveau dans la prochaine compilation de toute façon).
const
modificateur de votre entier, ou de déplacer l'initialisation à l'extérieur de la classe (comme dansclass Tester { static int number; }; int Tester::number = 5;
). Ce dernier qui semble le plus adapté à votre cas.class Tester { ... }
. Il devrait êtreclass Tester { ... }
;
Les autres erreurs sont probablement causés par l'erreur précédente. Ils devraient se corriger eux-mêmes automatiquement lorsqu'il est fixé.
Comme une note de côté, je ne pense pas que vous voulez vraiment le
static
modificateur sur votre membre. Il semble plus approprié pour un champ d'instance. Vous ne pouvez toujours pas l'initialiser en place si ce n'est pas C#), vous devez déplacer l'initialisation du constructeur. Par exemple:Selon cette: http://publib.boulder.ibm.com/infocenter/lnxpcomp/v8v101/index.jsp?topic=/com.ibm.xlcpp8l.doc/language/ref/cplr038.htm
Je ne suis pas positif, mais je pense que le reste des erreurs viennent de ce problème.
Corriger cela, et de voir dans quelle mesure il s'empare de vous.
les réponses déjà ici traitent pourquoi ton code ne compile pas et comment faire pour corriger cela. cependant, je suis intrigué par vos commentaires à propos de "extern". il est très facile à utiliser quand vous savez comment. vous déclarez dans un en-tête de la extern ed variable. et puis vous l'initialiser dans un seul fichier. n'importe quel autre fichier pouvez vous référer à la variable, y compris l'en-tête. par exemple,
en-tête.h:
header.cpp
main.cpp
Tout en utilisant les membres de classe statiques pour les variables globales permet de s'adapter à la oo schéma de conception, de sa plus élaboré que le nécessaire. si vous n'avez pas à suivre oo strictement, il suffit d'utiliser extern, il est plus facile et moins de code.