关于.template文件的问题

wind2411hawk 2009-06-07 10:09:22
我在 A.h 文件中定义一个类 A
class A
{
};
类的实现放在A.cpp文件中

在其他程序中我要用类A,#include"A.h",可是这样只包含了类A的定义,而没有类A的实现,怎样才能包含类A的实现,难道要 #include"A.cpp"吗?

我后来想到一个办法,就的在 A.h 中加一句
class A
{
};
#include"A.cpp"
可是这样编译会出错当我把A.cpp改成A.template就通过了,这是怎么回事?

这两个问题请大侠们帮我解答
...全文
156 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
省下a.cpp吧
直接拷贝内容到a.h中
Jalien 2009-06-07
  • 打赏
  • 举报
回复
VS 2008虽然不支持分离编译,但是支持包含编译模型的。[Quote=引用 10 楼 wind2411hawk 的回复:]
7楼的仁兄 什么是EDG编译器支持
我用vs2008都不支持分离编译模型
[/Quote]
Jalien 2009-06-07
  • 打赏
  • 举报
回复
vs2008是不支持分离编译啊。
谁告诉你vs 2008支持了?听你一说好像vs 2008是最好的编译器一样的~
EDG是个编译器。[Quote=引用 10 楼 wind2411hawk 的回复:]
7楼的仁兄 什么是EDG编译器支持
我用vs2008都不支持分离编译模型
[/Quote]
goodname 2009-06-07
  • 打赏
  • 举报
回复
目前大多数编译器都不支持模板分离

如果支持的话,可以使用export关键字
wind2411hawk 2009-06-07
  • 打赏
  • 举报
回复
我的是模板类啊 模板类不支持定义和实现分离吗
whatstheweather 2009-06-07
  • 打赏
  • 举报
回复
2008 不支持?
ltc_mouse 2009-06-07
  • 打赏
  • 举报
回复
一般只要类的定义就够了吧,链接时能找到对应的实现的呀~~
如果你的类是模板类,就都放在.h中好了,好像目前还很少有编译器支持分离编译的
wind2411hawk 2009-06-07
  • 打赏
  • 举报
回复
7楼的仁兄 什么是EDG编译器支持
我用vs2008都不支持分离编译模型
goodname 2009-06-07
  • 打赏
  • 举报
回复
神奇的做法。

A.template是什么文件?
adventurelw 2009-06-07
  • 打赏
  • 举报
回复
如果A是模版
template <class T>
class A
{
};
#include"A.cpp"//A.cpp是模版的实现文件

编译文件中不包含A.cpp但A.cpp在项目中时,则上面是正确的,也肯定能够编译成功;楼主说的情况没见过,.template不是正确的文件名,编译器
认不出液太傻了吧。

lylm 2009-06-07
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 lylm 的回复:]
在其他程序中我要用类A,#include"A.h",可是这样只包含了类A的定义,而没有类A的实现,怎样才能包含类A的实现,难道要 #include"A.cpp"吗?
>>当然不用,通常A.cpp会编译成.o或程序库,在链接时,自然可找到A的实现

可是这样编译会出错当我把A.cpp改成A.template就通过了,这是怎么回事?
如果包含A.cpp,会有2个类实现,编译器报重复定义,改成A.template后,编译器不会认为这是个C++实现,也就可编译通过
[/Quote]
再补充一下,A.template改成其他的也行,比如A.inc,VC6测试通过
Jalien 2009-06-07
  • 打赏
  • 举报
回复
模版有两种编译模型,一种是包含编译模型,一种是分离编译模型,包含编译模型所有编译器都实现了的,分离编译
模型据说只有EDG编译器支持。
lz你用包含编译模型吧。
给你个示例:
A.h(声明)

#ifndef A_H
#define A_H
template<class T>
class A
{
........
};
#include "A.cpp" //包含cpp文件
#endif //A_H


A.cpp(实现)

#ifndef A_CPP
#define A_CPP
#include "A.h"

.........实现

#endif //A_CPP


main

#include<A.h>
int main(){
.......
return 0;
}


lz可以参考这个贴中http://topic.csdn.net/u/20090528/11/a3a22523-c38a-41e8-9df6-e8d3632f7fd6.html 我的回答。

tianya0609 2009-06-07
  • 打赏
  • 举报
回复
LZ把三个程序都发上来和环境也说下,有点神奇的样子。搜藏下,O(∩_∩)O哈哈~
lylm 2009-06-07
  • 打赏
  • 举报
回复
在其他程序中我要用类A,#include"A.h",可是这样只包含了类A的定义,而没有类A的实现,怎样才能包含类A的实现,难道要 #include"A.cpp"吗?
>>当然不用,通常A.cpp会编译成.o或程序库,在链接时,自然可找到A的实现

可是这样编译会出错当我把A.cpp改成A.template就通过了,这是怎么回事?
如果包含A.cpp,会有2个类实现,编译器报重复定义,改成A.template后,编译器不会认为这是个C++实现,也就可编译通过
内容概要:本文系统研究了开关频率大于谐振频率(fs>fr)工况下,移相混合控制LLC谐振变换器在低压增益区域的工作特性,深入分析其在变频与移相结合控制模式下的调制机理、工作模态划分及损耗分布规律。通过Simulink平台构建高保真仿真模型,对变换器在不同负载和输入条件下的电压增益、转换效率、关键器件电压电流应力等性能指标进行了全面仿真验证,重点探讨了其在低增益区间的软开关实现能力与效率优化潜力,旨在提升LLC变换器在宽范围输入输出应用中的动态响应与能源转换效率。; 适合人群:从事电力电子变换器设计、高频电源开发及相关领域的高校研究生、科研院所研究人员及企业研发工程师,要求具备扎实的电路理论基础、电力电子技术知识以及一定的Simulink仿真能力。; 使用场景及目标:①深入理解LLC谐振变换器在fs>fr条件下采用移相混合控制的内在工作机理与模态转换过程;②掌握利用Simulink搭建复杂谐振变换器精确仿真模型的方法与技巧;③分析并优化低压增益区的增益特性与损耗构成,为设计高效率、高功率密度的软开关电源提供理论依据和数据支持; 阅读建议:建议读者结合文中所述仿真模型,亲自复现仿真过程,重点观察不同控制参数(如移相比、开关频率)对电压增益曲线和关键波形的影响,并对比传统变频控制策略,深入探究混合控制在拓宽调压范围、提升轻载效率方面的优势,从而深化对现代高效谐振电源设计的理解。
内容概要:本文提出了一种基于粒子群优化算法(PSO)的配电网光伏储能双层优化配置模型,以IEEE33节点系统为标准算例,实现光伏发电单元与储能系统的协同选址与定容优化。该模型采用双层架构设计,上层以投资成本、运行经济性及网络损耗最小为目标优化设备配置方案,下层通过潮流计算评估系统在不同负荷场景下的运行性能,综合考虑电压稳定性、供电可靠性及可再生能源消纳能力,最终通过Matlab编程实现完整求解流程,为高渗透率分布式电源接入背景下的配电网规划提供了有效的技术支撑。; 适合人群:具备电力系统分析基础和Matlab编程能力的研究生、高校科研人员及从事新能源并网、智能配电网规划与优化的工程技术人员。; 使用场景及目标:①研究含高比例光伏接入的配电网规划与运行协同优化问题;②掌握双层优化建模方法与粒子群算法在复杂电力系统问题中的应用技巧;③为实际工程中分布式光伏与储能系统的科学选址与容量配置提供理论依据与仿真验证平台。; 阅读建议:建议读者结合Matlab代码深入理解双层迭代求解机制,重点关注算法收敛性分析、参数敏感性测试,并可通过更换初始种群、调整权重因子或引入其他标准测试系统(如IEEE69节点)进行对比实验,进一步验证所提模型的普适性与鲁棒性。

65,210

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧