有兩個類頭檔案Class1.h和Class2.h,兩個頭檔案中定義的類相互有對方的指標參考,所以不能采用#include來參考對方類定義
//Class1.h的內容如下:
class CClass2;
class CClass1
{
public:
class CInnerClass
{
};
public:
CClass2* pClass2=nullptr;//這里定義正確
};
//Class2.h的內容如下:
class CClass1;
class CClass2
{
public:
CClass1* pClass1 = nullptr;//這里定義正確
CClass1::CInnerClass* pInnerClass = nullptr;//這里定義錯誤,無法編譯
};
這樣就造成CClass2中無法定義CClass1::CInnerClass類指標物件,不知道大家有沒有解決方法?
uj5u.com熱心網友回復:
class2.h是不是忘記包含class1.h頭檔案了? 前置宣告中你定義了class1,但是沒有定義class1里面的成員,直接在class2中定義class1中的成員為私有成員,是一定要看的到它的吧。uj5u.com熱心網友回復:
可以的,只要在建立CClass2實體的源檔案中#include "class1.h"即可,如果還不行,換個編譯器吧~~~uj5u.com熱心網友回復:
都在源檔案包含就行了,定義也寫在源檔案uj5u.com熱心網友回復:
一般這類操作是使用一個虛類作為,兩個類都共同include并繼承這個虛類uj5u.com熱心網友回復:
2頭檔案包含1的就好了, 1不包含2,前置聲明下class class2,cpp檔案裡面包含2的頭檔案就好uj5u.com熱心網友回復:
再加個class CClass1::CInnerClass;
前置宣告不就行了?反正你這個也是指標。
uj5u.com熱心網友回復:
首先就是因為相互包含,所以不能用include的,我考慮加個class CClass1::CInnerClass;但這個編譯就會錯誤的
uj5u.com熱心網友回復:
我在VS2015上用了,就是你的代碼,正常使用啊。Class1
#pragma once
class CClass2;
class CClass1
{
public:
CClass1() { printf("CClass1 Constructor\n"); }
~CClass1() { printf("CClass1 Destructor\n"); }
public:
class CInnerClass
{
public:
CInnerClass() { printf("CInnerClass Constructor\n"); }
~CInnerClass() { printf("CInnerClass Destructor\n"); }
};
public:
CClass2* pClass2 = nullptr;//這里定義正確
};
Class2
#pragma once
#include "Class1.h"
//Class2.h的內容如下:
class CClass1;
class CClass2
{
public:
CClass2() { printf("CClass2 Constructor\n"); }
~CClass2() { printf("CClass2 Destructor\n"); }
public:
CClass1* pClass1 = nullptr;
CClass1::CInnerClass* pInnerClass = nullptr;
};
main
#include <stdio.h>
#include "Class1.h"
#include "Class2.h"
int main()
{
CClass1 class1;
CClass2 class2;
return 0;
}
uj5u.com熱心網友回復:
前面不是說了嗎,兩個.h都不要#include參考對方,在建立CClass2實體的源檔案中#include "class1.h"即可(當然也要參考class2.h)轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/8153.html
標籤:C++ 語言
