erreur:un non membre de référence doit être relatif à un objet spécifique
Je ne comprends pas pourquoi la vue me donne l'erreur d'un membre non statique de référence doit être relatif à un objet spécifique.
CDrawView::Shape
est un enum que j'ai déclaré sur mon CDrawView
enum shape{line, rect, elli};
shape current_shape;
C'est mon autre classe
class Shapemaker
{
public:
CDrawView view;
static void Create(CDrawView::shape )
{
if(view.current_shape == view.line)
{
view.m_shape.reset(new Line());
}
else if(view.current_shape == view.rect)
{
view.m_shape.reset(new Rect());
}
}
}
Quelle est la meilleure pratique pour éviter cette erreur
Vous avez besoin de comprendre la différence entre statique et non-membres statiques. Les solutions de base sont: (a) vous faire une fonction membre non statique, ou (b) faire de votre variable membre statique.
OriginalL'auteur user1665569 | 2013-03-28
Vous devez vous connecter pour publier un commentaire.
Tout d'abord, puisque la fonction est
static
, il n'a pas accès àview
. C'est parce queview
est un non-membre statique deShapemaker
, donc, est associé uniquement à des instances spécifiques oShapemaker
. Soitview
doit êtrestatic
ou laCreate
fonction ne devrait pas l'être. L'autre alternative est queview
ne devrait pas être un membre et doit être créé à l'intérieur de laCreate
fonction.Aussi, l'enum constantes noms sont dans le champ d'application de la
CDrawView
classe et sont accessibles par le nom de la classe comme ceci:La
.
opérateur d'accéder à un non-membre statique d'un objet.view
ne dispose pas d'un non-membre statique appeléline
ourect
.OriginalL'auteur Joseph Mansfield
view
est un non-objet statique de la classe CDrawView,Create
est statique de la fonction deShapeMaker
classe, il n'y aura pas d'instance deview
si vous n'avez pas de construire un objet deShapeMaker
toutCreate
n'est pas associé avec tous les objets de ShapeMaker. Vous ne pouvez pas utiliser non membres à l'intérieur d'une fonction membre statique.OriginalL'auteur taocp