“未定義的引用”模板類構造函數我不知道為什么會發生這種情況,因為我認為我已經正確地聲明和定義了所有內容。我有以下程序,使用模板設計。這是一個簡單的隊列實現,其成員函數為“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

搖曳的薔薇
TA貢獻1793條經驗 獲得超6個贊
此鏈接說明了您出錯的地方:
[35.12]為什么我不能將模板類的定義與其聲明分開并將其放在.cpp文件中?
將構造函數的定義,析構函數方法和諸如此類的東西放在頭文件中,這樣可以解決問題。
這提供了另一種解決方
但是,這需要您預測模板的使用方式,并且作為一般解決方案,這是違反直覺的。雖然你開發了一些內部機制使用的模板,但你想要警告它的使用方式,它確實解決了這個問題。
- 4 回答
- 0 關注
- 1388 瀏覽
添加回答
舉報
0/150
提交
取消