模板类怎么在另一个文件中使用?

问题描述

//test.htemplate<typename T>class A{public: A(); void fun();};//test.cpp#include"test.h"template<typename T>A<T>::A(){}template<typename T>void A<T>::fun(){}int main(){ A<int> a;//在test.cpp里面可以编绎通过,但是在另一个文件里,我也#include"test.h"怎么就:undefined reference to `A<int>::A()'?}//这个怎么办啊?除了#include<test.cpp>以外还有没有别的办法

解决方案

来自:http://opencrazy.iteye.com/blog/3653211. 将C++模板类的声明和定义都放在一个文件,如.h或.cpp文件中 使用的时候加入#include "模板类文件名.h(或.cpp)“即可。 2. 将C++模板类的声明和定义分别放在.h和.cpp文件中 且在.cpp文件中包含 #include ".h" 不过在使用时,会因为不同的开发环境而有所不同: a. 在集成开发环境code::blocks下 在调用程序中只加入 #include "模板类.cpp" 可以编译、运行通过 或者同时加入 #include "模板类.h" 和 "模板类.cpp" 也可以编译、运行通过 但只加入 #include "模板类.h" 是不能够运行通过,会出现 undefined reference to 错误 b. 在linux gcc 环境下: 在调用程序中只能加入 #include "模板类.cpp" 才能编译、运行通过 否则 如果同时加入 #include "模板类.h" 和 "模板类.cpp" 则出现 class 重复定义的错误 总结: 为什么需要在调用程序中加入 #include "模板类.cpp" 那是因为只有将模板类.cpp文件同调用程序.cpp文件放在一起编译、运行才能真正确定类的真正类型,才能运行通过,不出现link之类(undefined reference to)的错误
解决方案二:
不用说了,楼上总结的很好了。
解决方案三:
没有别的办法。模板类,最好连同实现都放到.h里头。

时间: 2024-09-03 07:31:46

模板类怎么在另一个文件中使用?的相关文章

Java序列化,怎么把一个类,序列化到一个文件中去呢?

问题描述 已经有一个文件,想把类序列化到文件中,然后再从文件中反序列化,怎么实现呢? 问题补充:好吧,是这样的,其实就是基本文件流的操作,当时一时糊涂没想明白,多谢了 ! 解决方案 //创建一个可序列化类Personimport java.io.Serializable;public class Person implements Serializable{private String name;private String sex;public Person(String name,Strin

php表单的数据传递-php中从表格中得到的数据怎么样运用到另一个文件中

问题描述 php中从表格中得到的数据怎么样运用到另一个文件中 我想从表单中得到数据然后传到以下代码中的"tu" 代码如下: function getBoundary(){ var bdary = new BMap.Boundary(); bdary.get(" tu ", function(rs){ map.clearOverlays(); var count = rs.boundaries.length; for(var i = 0; i < count;

读文件-MFC一次性读取一个文件中所有字符

问题描述 MFC一次性读取一个文件中所有字符 我想一次性读取文件中的字符串,但是我读取的时候有问题,我的代码如下 file.Open(filePath,CFile::modeRead|CFile::typeBinery){ char * A = new char[file.GetLength()]; file.Read(A,file.GetLength()); CString strResult(A); delete A; return strResult.AllocSysString(); }

c++-命名空间中定义的类是否需要在同一文件中给出实现方法?

问题描述 命名空间中定义的类是否需要在同一文件中给出实现方法? 如题,比如在test.h文件中有如下namespace namespace ns { ...; class student *ptr; ...} class student 的实现方法是否要在test.h文件中给出?为什么? 解决方案 命名空间只是为了区分重命名等,你的实现等可以在其他cpp中. 解决方案二: 不需要,命名空间是为了防止变量重名.

class-一个头文件中的类继承另一个头文件中的类,应该怎么写

问题描述 一个头文件中的类继承另一个头文件中的类,应该怎么写 如题,查了c++primer,也没有详细解释.提示如下错误 g++ -O2 main.cpp -lm -o main C:UsersTraeyeeAppDataLocalTempccgVqs5n.o:main.cpp:(.text.startup+0x13): undefined reference to `test2::show2()' collect2.exe: error: ld returned 1 exit status /

w y f-编写一个java程序把两个文件中不同的行输出到一个文件中

问题描述 编写一个java程序把两个文件中不同的行输出到一个文件中 把两个文件中的内容不同的行输出到同一个文件中 代码:文件1:/x /x 46/m /x /x 稍/d 等/v 我/r 现在/t 去/v 写/v 上/vq 下/m?? 啊/y 去/v 协商/v 下/m 好的/l 亲爱的/n ,/w 当时/t 这个/r 图片/n 应用/v 的/u 地方/n 特别/d 多/a ,/w 就/d 像/v 全/a 用途/n 一样/u ./w 所以/c 还/d 挺/d 麻烦/a ,/w 等/v 我们/r 副总

文件读取-C# 快速删除一个文件中相同行

问题描述 C# 快速删除一个文件中相同行 我要从一个较大(上G)的文件中读取数据,要保证不能重复,也就是删除相同的行,读取一行再和前面的一行行对比效率太低了,有没有更好的方法?求大牛 解决方案 把每行添加到map中,因为map不允许key重复,每行内容作为key,最后把map中的内容写回去

shell脚本里的命令加参数 参数 是从另一个文件中取得 怎么设置

问题描述 shell脚本里的命令加参数 参数 是从另一个文件中取得 怎么设置 test.sh如下 #!/bin/bash usr/local/bin/ipmitest -I lanplus -H 10.18.32.80 -U root -P password -e sol active arg_conf 如下 10.18.32.90 root password 10.18.32.100 admin admin 10.18.32.110 test password 脚本里的命令的 ip user

如何实现linux中将一个文件中的包含某个字符的所有行按照原来的顺序拷贝到另外一个文件中?

问题描述 如何实现linux中将一个文件中的包含某个字符的所有行按照原来的顺序拷贝到另外一个文件中? 在文件/usr/share/mime/pac kages/freedesktop.org.xml 中查找所有包含 ich 的行,将找 出的行按照先后顺序拷贝到/root/lines 文件中,/root/lines 文件不包含空格,并且其中行的内容是源文件/usr/share/mime/pac 解决方案 可以先用grep命令搜索ich包含的行,定向到一个临时文件,然后打开/root/lines 文