下面是代碼C++這是一個不完整類型?
#include <iostream>
#include "ClassA.h"
ClassA* class_a = new ClassA();
int main() {
return 0;
}
A類
#ifndef CLASSA_H
#define CLASSA_H
#include <iostream>
#include "ClassB.h"
class ClassA
{
public:
ClassA()
{
ClassB classB = new ClassB();
std::cout << "End of constructor" << std::endl;
}
void ClassA::DoSomething(void)
{
std::cout << "ClassA DoSomething";
}
};
#endif /* CLASSA_H */
B類
#ifndef CLASSB_H
#define CLASSB_H
class ClassA;
extern ClassA* class_a;
class ClassB
{
public:
ClassB()
{
::class_a->DoSomething();
std::cout << "ClassB constructor" << std::endl;
}
};
#endif /* CLASSB_H */
在ClassB
的構造我在::class_a->DoSomething();
說member access into incomplete type "ClassA"
得到一個編譯錯誤。但是,在解析ClassB的構造函數時,ClassA不完整?當它通過ClassA時,它會在它的構造函數中獲得類型ClassB,然後希望通過該文件?
編譯器不會欺騙你。 'ClassA'在解析'class_a-> DoSomething();'行時確實沒有定義。嘗試將.h文件的內容放在一個.cc文件中,並檢查.cc文件的內容。 –
很明顯。 「B」中的「A」的定義在哪裏?你只有一個前向聲明,因此除了存儲引用(指針或ref)之外,你不能做任何事情。 – luk32