C++ error C2027:使用了未定義類型 類的調用順序

如果不想犯下面錯誤最好的做法是,先把每一個類都定義好後,再寫函數實現部分(本例中將void A::funcA(B* inB)就放到了最後實現),寫在前面的類,需要使用後面的類的時候只需要聲明一下(像本例中的class B;放在A類前一樣),但使用的時候只能是以指針的形式出現!

 注:其實把訪問放到實現文件(CPP)中會自然避免這個問題,寫到頭文件中便不能訪問成員且實現的代碼也比較多,也不好實現成Inline函數。

 

#ifndef TESTCLASS_H
#define TESTCLASS_H

#include <iostream>
using namespace std;
class B; //這樣的聲名方聲只能在指針參數和指針變量 e.g.funcA(B* inB),B* m_pB;
//不能用與對象的定義 e.g. B m_b 會報使用未定義的 class“B”;

//也不能調用B類中的方法會報funcB”的左邊必須指向類/結構/聯合/泛型類型

//因爲沒有先定義!class B僅僅是聲明不是定義!
class A
{
public:
	void funcA(B* inB);
};
//錯誤的位置,出現在類B前
//void A::funcA(B* inB)
//{
// inB->funcB();//使用了未定義類型“B”||“->funcB”的左邊必須指向類/結構/聯合/泛型類型
// //一定要先定義聲明再使用
//}
class B
{
public:
	void funcB(){cout <<"this is fucB"<<endl;}
};
//正確的位置,要出現在類B後面
void A::funcA(B* inB)
{
	inB->funcB();
}
#endif

client.cpp

#include "TestClass.h"
	void main()
{
	A a;
	B b;
	a.funcA(&b);
}
發佈了83 篇原創文章 · 獲贊 29 · 訪問量 29萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章