В следующей версии не компилится одна строка :
#include <stdio.h>
#include <stdlib.h>
class Ml
{
};
class X
{
public:
void Eat( Ml ml );
};
class Antilopa : public Ml
{
};
class Lion : public X
{
public:
void Eat( Ml ml )
{
printf("Lion eat antilopa" );
}
};
class Bizon : public Ml
{
};
class Wolf : public X
{
public:
void Eat( Ml ml )
{
printf("Wolf eat bizon" );
}
};
class Continent
{
public:
X create_x;
Ml create_ml;
};
class Africa : public Continent
{
public:
Ml create_ml()
{
Antilopa *ant = new Antilopa();
return *ant;
}
X create_x()
{
Lion *ln = new Lion();
return *ln;
}
};
class America : public Continent
{
public:
Ml ml()
{
Bizon *bz = new Bizon();
return *bz;
}
X x()
{
Wolf *wl = new Wolf();
return *wl;
}
};
class AnimalWorld
{
private : Ml ml;
private : X x;
public:
AnimalWorld( Continent continent )
{
x = continent.create_x;
ml = continent.create_ml;
}
public:
void RunFoodChain()
{
x.Eat(ml);// вот тут ошибка компиляции
}
};
int main()
{
Continent *africa = new Africa();
AnimalWorld *world = new AnimalWorld( *africa );
world->RunFoodChain();
return 0 ;
}
Компилятор пишет : // undefined reference to 'X::Eat(ml)'