我想通过另一个类的指针从类A调用Foo()函数 (我不能包含其他类的标题,因为我在其他类上执行此操作,因此它会导致一个,,包含它自己''错误)
//a.h
class X; // here I can't include "x.h", so forward declaration, but that results incomplete type
class A
{
X* ptr;
void Example()
{
X->Foo(); // it can't be use, casue ,,incomplete type is not allowed''
}
void Print();
}
//x.h
#include "a.h"
class X
{
A* ptrarray[];
void Foo();
void List()
{
for (i...)
ptrarray[i]->Print(); // ok, works fine
}
}
我如何解决这个问题,你能给我任何建议吗?
答案 0 :(得分:0)
在另一个文件中定义Foo()和void List()。并将X和A作为第一个参数传递给它们。 当你在那里定义它们时,你不会得到不完整类型的错误,因为编译器会提前得到它们的定义。 所以thrid文件看起来像
// wrapper.h
include <a.h>
include <x.h>
void Foo(X *objX, ....);
void List(A *objA, ....);
//wrapper.cpp
void Foo(X *objX, ....)
{
objX->Foo(....);
}
void List(A *objA, ....)
{
objA->List()l
}
答案 1 :(得分:0)
您正在做的错误是您在.h文件本身中定义类成员函数。 因此,请在相应的a.cpp和x.cpp中声明它们在类声明之外。并在a.cpp和x.cpp中添加a.h和x.h.好吧,如果你希望它们是内联的,你可以在定义类声明之外的时候添加内联,