为了账号安全,请及时绑定邮箱和手机立即绑定

“未定义的引用”模板类构造函数

“未定义的引用”模板类构造函数

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(),但这不允许我这样使用它。)等等。总共有17个警告,计算程序中调用的成员函数。为什么是这样?那些函数和构造函数已定义。我认为编译器可以用“float”,“string”等替换模板中的“T”; 这是使用模板的优势。我在这里读到,我应该将每个函数的声明放在头文件中由于某种原因。是对的吗?如果是这样,为什么?提前致谢。
查看完整描述

4 回答

?
三级狗

TA贡献1条经验 获得超0个赞

我..... 我专门注册个号就是来吐槽的。  真当国人上不了谷歌吗? stackoverflow上原模原样的问题与答案真是辛苦你们了换四个号来搬运,而且字里行间充斥着翻译软件的不走心翻译2333

查看完整回答
反对 回复 2019-07-26
?
摇曳的蔷薇

TA贡献1793条经验 获得超6个赞

此链接说明了您出错的地方:

[35.12]为什么我不能将模板类的定义与其声明分开并将其放在.cpp文件中?

将构造函数的定义,析构函数方法和诸如此类的东西放在头文件中,这样可以解决问题。

这提供了另一种解决方

如何使用模板函数避免链接器错误?

但是,这需要您预测模板的使用方式,并且作为一般解决方案,这是违反直觉的。虽然你开发了一些内部机制使用的模板,但你想要警告它的使用方式,它确实解决了这个问题。


查看完整回答
反对 回复 2019-07-25
  • 4 回答
  • 0 关注
  • 1257 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信