“未定义的引用”模板类构造函数
我不知道为什么会发生这种情况,因为我认为我已经正确地声明和定义了所有内容。
我有以下程序,使用模板设计。这是一个简单的队列实现,其成员函数为“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(),但这不允许我这样使用它。)
等等。总共有17个警告,计算程序中调用的成员函数。
为什么是这样?那些函数和构造函数已定义。我认为编译器可以用“float”,“string”等替换模板中的“T”; 这是使用模板的优势。
我在这里读到,我应该将每个函数的声明放在头文件中由于某种原因。是对的吗?如果是这样,为什么?
提前致谢。
三级狗
摇曳的蔷薇
相关分类