c 關於前向引用的錯誤使用問題

2021-10-23 04:08:13 字數 953 閱讀 9424

今天在除錯乙個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...