クラスの継承を使用しようとしています。私は本からコードを取り出し、クラス哺乳動物と哺乳動物のメンバーデータを継承するクラス犬を作成するために少し微調整しました。コードは次のとおりです。未定義の参照、コンパイルエラー
#include<iostream>
enum BREED{Labrador,Alcetian,Bull,Dalmetian,Pomerarian};
class Mammal{
public:
Mammal();
~Mammal(){}
double getAge(){return age;}
void setAge(int newAge){age=newAge;}
double getWeight(){return weight;}
void setWeight(double newWeight){weight=newWeight;}
void speak(){std::cout<<"Mammal sound!\n";}
protected:
int age;
double weight;
};
class Dog : public Mammal{
public:
Dog();
~Dog(){}
void setBreed(BREED newType){type=newType;}
BREED getBreed(){return type;}
private:
BREED type;
};
int main(){
Dog Figo;
Figo.setAge(2);
Figo.setBreed(Alcetian);
Figo.setWeight(2.5);
std::cout<<"Figo is a "<<Figo.getBreed()<<" dog\n";
std::cout<<"Figo is "<<Figo.getAge()<<" years old\n";
std::cout<<"Figo's weight is "<<Figo.getWeight()<<" kg\n";
Figo.speak();
return 0;
}
私はこのコードを実行すると,,それは私に次のエラー与える:
C:\ cygwinの\ TMP \ cc7m2RsP.o:。prog3.cpp :(テキスト+ 0x16を) : `Dog :: Dog() 'への未定義参照 collect2.exe:エラー:ldが1の終了ステータスを返しました。
助けてください。ありがとう。
ほとんどのメソッドのみ宣言(すなわち持たない本体)は次のようにコンストラクタを定義します。 (C++で定義されている) –
括弧がない(犬(){}) –
一般的なwisecrack:ツールチェーンがX(ここでは "undefined")に不平を言うと、X *は*それは文句を言う。 ;-) 'Dog :: Dog()'は定義されていません。 – DevSolar