Ошибка в программе C ++ из-за неопределенных ссылок

В классе Bird есть одна виртуальная функция canFly (), которая реализована в двух классах: Parrot и Crow. G - это глобальный класс, который запоминает номер. птиц (то есть ворона или попугая), а затем printBirds () печатает способность птиц летать.

Но я получаю некоторую ошибку из-за неопределенных ссылок. Может кто-нибудь объяснить это. Почему возникают эти ошибки и как исправить программу, чтобы удалить ошибки.

#include 
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;igetAbility();
         }
    }
 };
 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

0
задан Rog Matthews 24 February 2012 в 08:31
поделиться