在Bird類中,有一個虛函數canFly(),它在兩個類中實現:Parrot和Crow。 G是一個全球類,它記得沒有。 (即烏鴉或鸚鵡),然後printBirds()打印鳥類的飛行能力。由於未定義的引用引起的C++程序錯誤
但由於未定義的引用,我收到了一些錯誤。有人可以解釋這一點。爲什麼會出現這些錯誤以及如何糾正程序以消除錯誤。
#include <iostream>
using namespace std;
class Bird
{
bool abilityToFly;
public:
Bird()
{
abilityToFly=0;
}
bool getAbility()
{
return abilityToFly;
}
void setAbility(bool x)
{
abilityToFly=x;
}
virtual void canFly()
{
abilityToFly=0;
}
};
class Crow: public Bird
{
public:
void canFly()
{
setAbility(1);
}
};
class Parrot: public Bird
{
public:
void canFly()
{
setAbility(1);
}
};
class G
{
public:
static int numBirds;
static Bird *b[10];
static void addBird(Bird bird)
{
b[numBirds]= &bird;
numBirds++;
if (numBirds>10)
cout<<"Error in program";
}
static void printBirds()
{
for(int i=0;i<numBirds;i++)
{
cout<<"Bird "<<i<<"'s ability to fly"<<b[i]->getAbility();
}
}
};
int G::numBirds=0;
int main()
{
Parrot p;
p.canFly();
Crow c;
c.canFly();
G::addBird(p);
G::addBird(c);
G::printBirds();
return 0;
}
的錯誤是:
In function `main':
undefined reference to `G::b'
undefined reference to `G::b'
undefined reference to `G::b'
的代碼的鏈接是: http://codepad.org/Mjpu4wFv
也許是因爲b從來沒有初始化? – Tim 2012-02-24 08:34:39
'addBird()'壞了。改變函數以參考爲參數。 – UmNyobe 2012-02-24 08:38:50
我不明白'canFly()'的含義,你能解釋一下嗎? – shengy 2012-02-24 08:41:26