0

我想通过另一个类的指针从类 A 调用 Foo() 函数(我不能包含另一个类的标题,因为我在另一个类上这样做了,所以它会导致一个 ,,contains selfs' 错误)

//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
 }
}

我该如何解决这个问题,你能给我任何建议吗?

4

2 回答 2

0

在另一个文件中定义 Foo() 和 void List()。并将 X 和 A 作为第一个参数传递给它们。当你在那里定义它们时,你不会得到这个类型不完整的错误,因为编译器会很早就得到它们的定义。所以第三个文件看起来像

// 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
}
于 2013-05-10T11:03:27.190 回答
0

您正在做的错误是您在 .h 文件本身中定义类成员函数。所以请在对应的 a.cpp 和 x.cpp 中的类声明之外声明它们。并在 a.cpp 和 x.cpp 中添加 ah 和 xh。好吧,如果您希望它们是内联的,您可以在类声明之外定义时向它们添加内联

于 2013-05-10T11:12:19.670 回答