今天在除錯乙個demo 程式:
#include
#include
#include
class result;
class mathcallback
void add(int a,int b,result &callerclass)
};class result
};int main(int argc, char* ar**)
通過下面命令編譯:
g++ -o test1 test1.cpp
報下面錯誤:
test1.cpp: in member function 『void mathcallback::add(int, int, result&)』:
test1.cpp:32:20: error: invalid use of incomplete type 『class result』
callerclass.showresult(result);
^test1.cpp:8:8: error: forward declaration of 『class result』
class result;
^通過分析該問題是由於在類未定義時呼叫該類的成員函式,無法找到該成員函式。
下面是關於前向引用說明:
可以宣告乙個類而不定義它
class screen;//declaration of the screen class
這個宣告,有時候被稱為前向宣告(forward declaration),在程式中引入了類型別的screen.在宣告之後,定義之前,類screen是乙個不完全型別(incompete type),即已知screen是乙個型別,但不知道包含哪些成員.
不完全型別只能以有限方式使用,不能定義該型別的物件,不完全型別只能用於定義指向該型別的指標及引用,或者用於宣告(而不是定義)使用該型別作為形參型別或返回型別的函式.
引自:
C 前向引用宣告
c 當中當有兩個類需要相互引用的時候,不管哪乙個類宣告在前,都會導致類未定義的編譯錯誤。這時候就需要用到類的前向引用宣告,下面的例子中,類a中需要使用類b,但是類b的完整宣告是在a之後,這時在類a的完整宣告之前加一句class b 告訴編譯器b是乙個類名,之後在類a中就可以使用類b作為函式引數了。c...
關於C 類中的前向宣告
前向宣告就是 可以宣告乙個類而不定義它 class screen declaration of the screen class 這個宣告,有時候被稱為前向宣告 forward declaration 在程式中引入了類型別的screen.在宣告之後,定義之前,類screen是乙個不完全型別 inco...
關於類的前向宣告
前向宣告的定義 有些時候我們可以宣告一些類但是並不去定義它,當然這個類的作用也很有限了。比如class foo 宣告乙個foo類,這個宣告,有時候也叫做前向宣告 forward declaration 在宣告完這個foo類之後,定義完這個foo類之前的時期,foo類是乙個不完全的型別 incompl...