J'écris une classe C++ pour lire l'entrée d'un fichier dans des tampons préalloués appelés "morceaux".C++: comment une fonction membre statique publique peut-elle accéder à des variables de membre d'instance privée?
Je veux l'appelant pour être en mesure d'appeler une méthode de classe Chunk public static appelée GetNextFilledChunk(), qui
- Grabs un gros morceau d'un pool de morceau inactif
- Remplit l'instance de Chunk de la flux d'entrée en utilisant les variables/fonctions membres privées de Chunk
- Renvoie un pointeur sur le morceau à l'appelant
Mais l'étape 2 me donne des crises. Peu importe ce que j'ai essayé, essayer d'accéder aux variables/fonctions des membres privés de l'occurrence de bloc entraîne l'émission d'erreurs par g ++ 4.2.1.
est ici un morceau de la définition de classe à partir du fichier d'en-tête:
class Chunk
{
public:
Chunk();
...
static Chunk* GetNextFilledChunk();
...
private:
...
ssize_t m_ActualTextSize;
};
Et voici une partie du fichier source qui montre le problème: Comme le montre
#include "Chunk.h"
Chunk::
Chunk* GetNextFilledChunk()
{
...
theChunk = sInactiveChunks.top();
sInactiveChunks.pop();
...
theChunk->m_ActualTextSize = TextSize(); // PROBLEM IS HERE
...
return theChunk;
}
, g ++ se plaint que GetNextFilledChunk () tente d'accéder à un membre privé de Chunk.
Ensuite, j'ai pensé, peut-être qu'il doit être un "ami". Mais tout ce que j'ai essayé de faire dans le fichier d'en-tête pour faire GetNextFilledChunk() un ami se traduit par une erreur. Par exemple:
friend static Chunk * GetNextFilledChunk();
résultats dans "Chunk.h: 23: avertissement: 'Chunk * GetNextFilledChunk()' a déclaré 'statique' mais jamais défini"
Ce que je trouve vraiment bizarre est que si je fais simplement GetNextFilledChunk() une plaine ancienne fonction, pas une fonction de membre statique, je peux "l'ami" et tout le monde est heureux. Mais cela semble stupide - pourquoi devrait-on être capable de faire quelque chose dans une classe à partir d'une fonction non-classe qui ne peut pas être effectuée à partir d'une fonction membre statique?
Alors ... Comment peut-accès aux fonctions GetNextFilledChunk() s de Chunk variables membres privées d'une instance de Chunk?
Et si elle ne peut se faire, est-il une partie inhérente de C++, ou tout simplement un bogue dans g ++?
sauf pour raison de faute de frappe, je pense qu'il y a aussi un problème qu'une fonction membre statique n'est pas autorisée à visiter membre non statique. – DarkHorse