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表示沒有該函式沒有需要帶回的資料 當你的函式當中需要呼叫了某個函式,但是你...