0
嗨,我有以下几点:使用indefined类型的
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 :: foo)。
我确切地说,一切都写在一个单一的文件。
你能帮我理解我做错了什么吗?
感谢您的帮助
纳撒尼尔
不,它不。这只是普通的C语言,你可以通过只提供前向声明来调用函数......这对于编译器来说已经足够了,链接时需要定义 –
不,它是C++,它是一个成员函数。 –
是的大声笑我知道我正在写C++ ...我刚刚明白你的意思,我以为你告诉你要提供函数定义,实际上你告诉了提供完整的类定义。所以我所知道的一天是没有办法向前宣布一个成员函数! –