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.

Notez que ce programme fuites de mémoire dans tous les sens: non seulement Animal dire name = new char[20], mais aussi l'ensemble de ses classes dérivées, ce qui signifie que chaque fois qu'un Animaldé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