“未定义的引用”模板类构造函数我不知道为什么会发生这种情况,因为我认为我已经正确地声明和定义了所有内容。我有以下程序,使用模板设计。这是一个简单的队列实现,其成员函数为“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”; 这是使用模板的优势。我在这里读到,我应该将每个函数的声明放在头文件中由于某种原因。是对的吗?如果是这样,为什么?提前致谢。
4 回答
三级狗
TA贡献1条经验 获得超0个赞
我..... 我专门注册个号就是来吐槽的。 真当国人上不了谷歌吗? stackoverflow上原模原样的问题与答案真是辛苦你们了换四个号来搬运,而且字里行间充斥着翻译软件的不走心翻译2333
摇曳的蔷薇
TA贡献1793条经验 获得超6个赞
此链接说明了您出错的地方:
[35.12]为什么我不能将模板类的定义与其声明分开并将其放在.cpp文件中?
将构造函数的定义,析构函数方法和诸如此类的东西放在头文件中,这样可以解决问题。
这提供了另一种解决方
但是,这需要您预测模板的使用方式,并且作为一般解决方案,这是违反直觉的。虽然你开发了一些内部机制使用的模板,但你想要警告它的使用方式,它确实解决了这个问题。
- 4 回答
- 0 关注
- 1317 浏览
添加回答
举报
0/150
提交
取消