これは本当に単純な質問であり、おそらく何度か答えられた質問だと思います。しかし、私は本当にC ++に夢中になっていて、解決策を見つけられませんでした。私は本当に助けていただければ幸いです。
基本的に:
#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
ヘッダーファイルです。ここで、
#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;
}
Cファイルです。ご覧のとおり、非常に単純なものですが、コンパイルしようとすると、「エラー:'name'はこのスコープで宣言されていません」というメッセージが表示されます。
setNameメソッドをコメントアウトするとコンパイルされます。Ivは「name」をpublicに設定しようとしましたが、それでも同じエラーが発生します。また、setName()で「this-> name = _name」を使用しようとしましたが、その結果、「非メンバー関数での「this」の使用が無効になりました」。
他に何を探すべきかわかりません。前もって感謝します。