我有以下内容:
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)。
我想澄清一切都写在一个文件中。
你能帮我理解我做错了吗?
答案 0 :(得分:1)
将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
}
答案 1 :(得分:0)
m_a->
- 您正在取消引用A*
。此时,编译器需要A
的完整定义。
简而言之:前方声明不起作用。提供完整的类型。