我有兩個類。每個都有一個指向另一個類的指針。所以我必須在其中之一中使用前向類聲明。這個方法運行良好,直到我需要使用帶有模板的函數(我必須在頭文件中寫入聲明和實現)。如何在模板函數中使用forward類聲明?
更具體地說,我的代碼就像下面的文件。這些文件通過MS Visual Studio 2010在Windows上沒有問題編譯。但是,當我在XCode 4.3.2的Mac上編譯它們時,在ClassA.h文件中出現「成員訪問不完整類型ClassB」的錯誤。
任何人都可以告訴我如何使用XCode在Mac上編譯它?
文件ClassA.h
#ifndef CLASS_A
#define CLASS_A
//#include "ClassB.h"
class ClassB;
class ClassA
{
public:
ClassA();
template <typename T>
void funcA(T *t);
int iNum;
ClassB *pB;
};
template <typename T>
void ClassA::funcA(T *t)
{
iNum = *(int*)t;
iNum += pB->iNum;
}
#endif
文件ClassA.cpp
#include "ClassA.h"
ClassA::ClassA()
{
iNum = 1;
}
文件ClassB.h
#ifndef CLASS_B
#define CLASS_B
#include "ClassA.h"
class ClassB
{
public:
ClassB();
template <typename T>
void funcB(T *t);
int iNum;
ClassA *pA;
};
template <typename T>
void ClassB::funcB(T *t)
{
iNum = *(int*)t;
iNum -= pA->iNum;
}
#endif
文件ClassB.cpp
#include "ClassB.h"
ClassB::ClassB()
{
iNum = 2;
}
主文件
#include <stdio.h>
#include "ClassA.h"
#include "ClassB.h"
int main(void)
{
ClassA objA;
ClassB objB;
objA.pB = &objB;
objB.pA = &objA;
int a = 11;
int b = 22;
objA.funcA(&a);
objB.funcB(&b);
printf("Class A: %d, %d\n", objA.iNum, objA.pB->iNum);
printf("Class B: %d, %d\n", objB.iNum, objB.pA->iNum);
return 0;
}
我得到了同樣的錯誤在Linux上。我們的程序應該能夠在所有平臺上運行,而不僅僅是Windows。 :( – redpearl