亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

“未定義的引用”模板類構造函數

“未定義的引用”模板類構造函數

C++
青春有我 2019-07-25 15:45:09
“未定義的引用”模板類構造函數我不知道為什么會發生這種情況,因為我認為我已經正確地聲明和定義了所有內容。我有以下程序,使用模板設計。這是一個簡單的隊列實現,其成員函數為“add”,“substract”和“print”。我已經在精細的“nodo_colaypila.h”中為隊列定義了節點:#ifndef NODO_COLAYPILA_H#define NODO_COLAYPILA_H#include <iostream>template <class T> class cola;template <class T> class nodo_colaypila{         T elem;         nodo_colaypila<T>* sig;         friend class cola<T>;     public:         nodo_colaypila(T, nodo_colaypila<T>*);};然后在“nodo_colaypila.cpp”中實現#include "nodo_colaypila.h"#include <iostream>template <class T> nodo_colaypila<T>::nodo_colaypila(T a, nodo_colaypila<T>* siguiente = NULL){     elem = a;     sig = siguiente;//ctor}然后,隊列模板類的定義和聲明及其功能:“cola.h”:#ifndef COLA_H#define COLA_H#include "nodo_colaypila.h"template <class T> class cola{         nodo_colaypila<T>* ult, pri;     public:         cola<T>();         void anade(T&);         T saca();         void print() const;         virtual ~cola();};#endif // COLA_H但是當我構建時,編譯器會在模板類的每個實例中拋出錯誤:未定義引用`cola(float):: cola()'...(它實際上是cola'<'float'>':: cola(),但這不允許我這樣使用它。)等等??偣灿?7個警告,計算程序中調用的成員函數。為什么是這樣?那些函數和構造函數已定義。我認為編譯器可以用“float”,“string”等替換模板中的“T”; 這是使用模板的優勢。我在這里讀到,我應該將每個函數的聲明放在頭文件中由于某種原因。是對的嗎?如果是這樣,為什么?提前致謝。
查看完整描述

4 回答

?
三級狗

TA貢獻1條經驗 獲得超0個贊

我..... 我專門注冊個號就是來吐槽的。? 真當國人上不了谷歌嗎? stackoverflow上原模原樣的問題與答案真是辛苦你們了換四個號來搬運,而且字里行間充斥著翻譯軟件的不走心翻譯2333

查看完整回答
反對 回復 2019-07-26
?
搖曳的薔薇

TA貢獻1793條經驗 獲得超6個贊

此鏈接說明了您出錯的地方:

[35.12]為什么我不能將模板類的定義與其聲明分開并將其放在.cpp文件中?

將構造函數的定義,析構函數方法和諸如此類的東西放在頭文件中,這樣可以解決問題。

這提供了另一種解決方

如何使用模板函數避免鏈接器錯誤?

但是,這需要您預測模板的使用方式,并且作為一般解決方案,這是違反直覺的。雖然你開發了一些內部機制使用的模板,但你想要警告它的使用方式,它確實解決了這個問題。


查看完整回答
反對 回復 2019-07-25
  • 4 回答
  • 0 關注
  • 1388 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號