variable membre statique lorsqu'il est déclaré privé
Lorsqu'une variable membre statique est déclaré en privé dans une classe, comment peut-il être défini?
Supposons que j'ai la suite de la déclaration de classe
class static_demo
{
private:
static int a;
public:
static int b;
void set(int x, int y)
{
a = x;
b = y;
}
void show()
{
cout << "a = " << a << "\n";
cout << "b = " << b << "\n";
}
};
Alors l'instruction suivante pour définir a
entraînera une erreur de compilation.
int static_demo::a;
Ainsi est-il possible d'avoir une donnée membre statique dans la section privée de la classe?
L'ajout de code complet comme par Greg,
#include <iostream>
using namespace std;
class static_demo
{
private:
static int a;
public:
static int b;
void set(int x, int y)
{
a = x;
b = y;
}
};
int static_demo::a;
int static_demo::b;
int main()
{
static_demo::b = 10;
static_demo::a = 20;
return 0;
}
L'erreur de compilation est:
static_member_variable.cpp: In function `int main()':
static_member_variable.cpp:20: error: `int static_demo::a' is private
static_member_variable.cpp:26: error: within this context
source d'informationauteur nitin_cherian
Vous devez vous connecter pour publier un commentaire.
De la même manière que vous définissez un public statique de la variable source(rpc) du fichier.
Spécificateurs d'accès ne vous donnera pas d'erreur lors de la définition de la membre. Spécificateurs d'accès pour contrôler l'accès des variables de membre, la définition d'une variable statique est une excpetion ce qui est permis.
Compile correctement sur Ideone ici.
EDIT: pour répondre À ta question après que vous avez posté code.
Votre problème n'est pas la définition du membre statique. L'erreur est parce que vous essayez d'accéder à l'privés membre statique à l'intérieur de
main
. Vous ne pouvez pas le faire.Membres privés d'une classe ne peut être consulté à l'intérieur de la classe des fonctions de membre du, la même règle s'applique même à des membres statiques. Pour être en mesure de modifier ou d'accéder à vos membres statiques, vous devrez ajouter une fonction membre de votre classe et ensuite de le modifier ou de l'accès du membre statique à l'intérieur.
dans votre .rpc:
lorsque cela provoque une erreur, il est plus fréquent que vous avez rencontré une erreur liens pour multiplier un symbole défini (par exemple, la définition a été dans l'en-tête), ou que vous avez essayé de la définir dans le mauvais champ d'application. c'est, si
static_demo
est dans lenamespace MON
il devrait être défini dans la .rpc:pour les autres types, il peut simplement avoir été un mauvais constructeur.
Le problème n'est pas la définition, mais le fait que dans main() (qui n'est pas dans le nom de la portée de static_demo, et ne peut pas voir
a
privés), vous avez une affectation.La définition de
a
est ce que vous avez à portée mondiale, avecint static_demo::a;
.Vous avez simplement besoin d'un initialiseur, si vous voulez
a
de ne pas commencer avec une valeur non définie.permettra de résoudre le problème.
De que sur,
a
peut être manipulé uniquement par les fonctions destatic_demo
(d'ami).