C中,有關呼叫外部類函式的問題

2021-03-19 18:34:46 字數 3769 閱讀 3940

1樓:匿名使用者

模板類的宣告和函bai數體必須都放在du標頭檔案中。zhi否則編譯器在實體

dao化的時候沒辦法根

內據模板引數來

容確認實體部分的**。

這是規則。

如果您不想把模板類的定義放在標頭檔案,那麼唯一的方法就是把模板類定義、實體、使用者都放進file2.cpp。

c++怎麼類外定義模板類的成員函式? 模板引數怎麼呼叫?

2樓:匿名使用者

#ifndef stack_h

#define stack_h

#include

#include

/*** 棧

*/template

class stack

;template

stack::stack() : top(-1){}template

void stack::push(const itemtype& item)

top++;

array[top] = item;

}template

itemtype stack::pop()itemtype temp = array[top];

top--;

return temp;

}template

itemtype stack::peek() constreturn array[top];

}template

bool stack::isempty() consttemplate

bool stack::isfull() consttemplate

void stack::clearstack()}#endif //stack_h

呼叫的方法,如下:

#include

#include"stack.h"

int main()

關於c++類中帶函式模板的問題。。

3樓:匿名使用者

#include

using namespace std;

class student

};class manage }}

}};int main()

大概按照上面的來寫就可以了

4樓:匿名使用者

大致明白你的意思了。你是想用c++的stl標準的algorithm演算法來排序對吧?

如果是這樣,你得自己寫一個iterator類的東西來處理你的資料的。原因請參見stl演算法的使用方式。

c++中如何在類别範本外定義函式

5樓:匿名使用者

目前的大多數***piler還不能解析在類的宣告之外定義的member template。

c++ standard 對於在類定義之外定義member template 的標準寫法如下(不過在vc++6.0下無法編譯通過):

template template

void a::test(t1 p)

6樓:匿名使用者

#include

using namespace std;

template

class ***pare

;// 在類别範本外面定義其成員函式:

template

***pare::***pare(numtype a,numtype b)

template

numtype ***pare::max()template

numtype ***pare::min()

7樓:匿名使用者

是想定義在原始檔嗎?

1.這是不允許的,因為模板類的成員函式的定義,是一種不完整的定義.2.由於編譯器不知道模板引數的具體型別,無法為其成員函式生成**.3.

編譯器在成員函式的呼叫處,才最終知道如何生成**.總之,模板類的成員函式的定義不能像普通類的成員函式一樣,定義在源**中,而只能定義在標頭檔案中.

如果想定義在標頭檔案中的模板類以外,倒是可以做到,如下:

template

***pare::***pare(numtype a,numtype b)

template

numtype ***pare::max()template

numtype ***pare::min()

8樓:匿名使用者

同樣的定義一個模板函式。

9樓:落雨轟隆

類别範本的成員函式的實現寫在標頭檔案(.h)的類內部或類外部都行,

但是,類别範本成員函式在另一個檔案(.cpp)裡實現它報錯

error lnk2019: 無法解析的外部符號 "public: void __thiscall ***pare::

test(void)" (?test@?$***pare@m@@qaexxz),該符號在函式 _main 中被引用

c++模板類的派生類的成員函式寫在類外怎麼寫,怎麼呼叫??

10樓:砍侃看

你這應該指的bai

是將頭du檔案和cpp檔案分開編輯的意zhi思,很明顯了標頭檔案的內容

dao也回就是類的定義放在答一個檔案中,然後類的具體實現放在另一個檔案中,只不過類實現檔案需要include自己的標頭檔案。我理解的類外實現,應該是這個意思

c++帶有模板的類,它的方法只能實現在.h裡嗎?

11樓:匿名使用者

也不是隻能放在.h裡面,但是推薦放在.h裡面。stl模板實現全部是放在.h裡面的。

------------------

編譯能通過。

1)參與編譯的只是.cpp檔案,不會報錯的原因,是因為它能在.h裡面找到模板的宣告。

連結錯誤。

1)連結的時候,需要例項化模板,這時候就需要找模板的具體實現了。假設在main函式中呼叫了一個模板函式,這時候就需要去例項化該型別的模板。注意main函式裡面只包含了.

h檔案,也就是隻有模板的宣告,沒有具體實現。就會報錯。

2)而模板的實現.cpp裡面,雖然有模板的具體實現,但是沒有誰在該.cpp裡面使用一個模板函式,就不會生成一個具體化的例項。

ps:模板是在需要的時候,才會去生成一個具體化的例項的,比如,你只要一個int型的例項,模板就只會給你生成一個int型的例項,模板本身是不會被執行的(也就是模板本身不產生彙編指令),是模板生成的具體化例項才產生指令(這個例項是隱藏的,我們是看不到的)

解決方案:

1)將模板實現寫在.h裡面

2)如果你非要寫在.cpp裡面,那麼請在模板實現的.cpp檔案裡面(或者.

h裡面)顯式的例項化一個模板。如果是這樣的話,那模板就沒有太大的意義了,難道你去自己手動例項化所有的例項?

12樓:匿名使用者

不能連結

.h 顯然不是隻給這一個 .cpp 檔案用的。

在編譯這個 .cpp 檔案的時候根本不知道 要用哪些模板引數例項化這個模板;在編譯其他 包含這個 .h 檔案、並且使用了 idgenerator 的 .

cpp 檔案的時候,告訴了編譯器要用哪些模板引數例項化這個模板,但是又不知道如何例項化這個模板

13樓:匿名使用者

是的,只能在標頭檔案中。c++不會直接編譯模板自身,它需要根據使用的情況,生成一些**,再編譯這部分**。

「轉到宣告」這是ide的能力,不是c++語言本身的概念,與連結無關。

c語言關於外部檔案呼叫結構體變數的問題急求

最終的答案我已經找到 file head.h struct test 這裡不能定義任何變數,因為標頭檔案被許多檔案包含,會出現重複定義 extern struct test right 申明結構體變數 right 在其它檔案中定義 file use.c struct test right 在這裡將 ...

在呼叫函式時,函式是怎樣傳值的,c語言函式呼叫時,實參和形參是如何傳遞的?什麼時候要寫指標型變數?求高手指點

在c語言中,實參將值傳給函式中的形參,實現了自上而下的值傳遞,就可以呼叫函式了。舉個淺顯一點的例子吧 include void main int swap int x,int y 在主函式中,將實參a,b的值傳遞給被呼叫函式中的形參x,y,即將a,b分別代入x,y中計算,即達到了呼叫的目的。函式的傳...

c語言函式的定義問題,C語言函式的定義問題

void就是沒有返回值,不需要return 是否需要返回值是由你的需求決定的。陳恩點在此為你解答如有錯誤請見諒 不是沒有返回值 是void 不能有返回值 include int f int i int main 第一個void表示沒有該函式沒有需要帶回的資料 當你的函式當中需要呼叫了某個函式,但是你...