C++ “Variable non déclarée dans le champ” nouveau
Je suppose que c'est vraiment une question simple et, sans doute, celui qui a été répondu à plusieurs reprises. Cependant, j'ai vraiment faire sucer au C++ et ont cherché en vain une solution.
J'apprécierais vraiment l'aider.
En gros:
#ifndef ANIMAL_H
#define ANIMAL_H
class Animal
{
public:
void execute();
void setName(char*);
Animal();
virtual ~Animal();
private:
void eat();
virtual void sleep() = 0;
protected:
char* name;
};
class Lion: public Animal
{
public:
Lion();
private:
virtual void sleep();
};
class Pig: public Animal
{
public:
Pig();
private:
virtual void sleep();
};
class Cow: public Animal
{
public:
Cow();
private:
virtual void sleep();
};
#endif
Est le fichier d'en-tête, où:
#include <iostream>
#include "Animal.h"
using namespace std;
Animal::Animal()
{
name = new char[20];
}
Animal::~Animal()
{
delete [] name;
}
void setName( char* _name )
{
name = _name;
}
void Animal::eat()
{
cout << name << ": eats food" << endl;
}
void Animal::execute()
{
eat();
sleep();
}
Lion::Lion()
{
name = new char[20];
}
void Lion::sleep()
{
cout << "Lion: sleeps tonight" << endl;
}
Pig::Pig()
{
name = new char[20];
}
void Pig::sleep()
{
cout << "Pig: sleeps anytime, anywhere" << endl;
}
Cow::Cow()
{
name = new char[20];
}
void Cow::sleep()
{
cout << "Cow: sleeps when not eating" << endl;
}
est le C fichier.
Comme vous pouvez le voir, des trucs vraiment simples, mais, j'ai: "erreur:" nom "n'a pas été déclarée dans le champ" à chaque fois que j'essaie de compiler.
Il compile si j'commentaire la méthode setName. Iv essayé paramètre 'nom' du public et de l'obtiens toujours la même erreur. J'ai également essayé d'utiliser "this->nom = _name" setName(), qui se traduit en "utilisation invalide de ‘cette’ non-membre de la fonction".
Je ne sais pas quoi d'autre à la recherche. Merci à l'avance.
Animal
dire name = new char[20]
, mais aussi l'ensemble de ses classes dérivées, ce qui signifie que chaque fois qu'un Animal
dérivée de la classe est instanciée, vous de fuite de 20 octets. De plus, le setName()
méthode doit prendre un const char*
, et devrait copier de sa valeur dans le name
tampon; dire name = _name
exemplaires seulement le pointeur, pas le contenu. Et la suppression de ce contenu n'est pas défini et peut provoquer un plantage. Vous êtes le meilleur off à l'aide de std::string
.OriginalL'auteur Jubbsee | 2010-08-16
Vous devez vous connecter pour publier un commentaire.
devrait être
Vous avez besoin d'avoir
Animal::
si vous utilisez lethis
paramètre. SansAnimal::
il pense que vous êtes juste de créer une nouvelle fonction appeléesetName
En fait le
this->name
n'est pas nécessaire pour résoudrename
, une foissetName
a bien été tourné dans une situation de non-fonction membre statique.vous avez raison @Timo, je voudrais juste être très explicite quand j'écris mes classes C++. Veuillez accepter si cela vous a aidé @Jubbsee
OriginalL'auteur Bob Fincheimer
La façon dont vous avez écrit le code
setName
est une fonction libre, pas une fonction membre. Pour cette raison, le compilateur ne peut pas résoudrename
.Vous aurez à changer setName:
OriginalL'auteur Timo Geusch
Le soupçon est "non-membre de la fonction".
Vous avez besoin pour faire de la fonction dans une fonction de membre:
OriginalL'auteur Douglas Leeder
"Il compile si j'commentaire la méthode setName"
Vous n'avez pas de "méthode setName" dans votre programme (en se référant à la problématique de la définition). Vous avez défini complètement indépendant de la fonction globale appelée
setName
, ce qui n'est pas une "méthode" de quoi que ce soit. Si vous souhaitez définir un méthode, c'est à dire une fonction membre d'une classe, vous devez vous référer à l'aide de laclass_name::method_name
format. Que seraitAnimal::setName
dans votre cas.OriginalL'auteur AnT