Привет, у меня есть следующее:
class A; // forward declaration of class A
void A::foo(int, int); // forward declaration of member function foo of A
class Functor
{
public:
Functor(const A* in_a):m_a(in_a){}
virtual ~Functor(){m_a= 0;};
virtual void Do(int,int) = 0;
protected:
const A* m_a;
};
class FunctorDerived: public Functor
{
FunctorDerived(const A* in_a):Functor(in_a){}
void Do(int in_source, int in_target)
{
m_a->foo(in_source, in_target);
}
};
class A
{
....
void foo(int, int);
....
}
Когда компилятор компилятора говорит:
error C2027: use of undefined type 'A'
see declaration of 'A'
Кажется, что A не распознается компилятором, хотя я просил его объявить, а также переслать объявленную функцию-член, которую мне нужно использовать (A :: foo).
Я точно знаю, что все написано в одном файле.
Не могли бы вы помочь мне понять, что я сделал неправильно?
Спасибо за помощь
Натаниель
Переместите определение A
сверху. Тогда, если вам нужно реализовать foo
:
class A
{
void foo(int, int);
}
class Functor
{
public:
Functor(const A* in_a):m_a(in_a){}
virtual ~Functor(){m_a= 0;};
virtual void Do(int,int) = 0;
protected:
const A* m_a;
};
class FunctorDerived: public Functor
{
FunctorDerived(const A* in_a):Functor(in_a){}
void Do(int in_source, int in_target)
{
m_a->foo(in_source, in_target);
}
};
void A::foo(int x, int y)
{
//do smth
}
m_a->
- вы разыменовываете A*
. На этом этапе компилятору необходимо полное определение A
Короче говоря, форвардная декларация не будет работать. Обеспечьте полный тип.