刚学模板,一个编译问题

blackblue 2003-07-10 07:34:00
//A.h
#ifndef _A
#define _A

template<bool b=false>
class A1
{
public:
A1();
void F();
};
#endif

//A.cpp
#include "A.h"

template<bool b>
A1<b>::A1()
{
}

template<bool b>
void A1<b>::F()
{
}

//main.cpp
//main函数中
A1<false> a;
a.F();

编译后提示错误:
Linking...
Testt.obj : error LNK2001: unresolved external symbol "public: void __thiscall A1<0>::F(void)" (?F@?$A1@$0A@@@QAEXXZ)
Testt.obj : error LNK2001: unresolved external symbol "public: __thiscall A1<0>::A1<0>(void)" (??0?$A1@$0A@@@QAE@XZ)
Debug/Testt.exe : fatal error LNK1120: 2 unresolved externals

那位老大给我解释一下,谢谢了
...全文
49 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
rick111111 2003-09-17
  • 打赏
  • 举报
回复
tks,解决了我的问题
bbcallen 2003-07-10
  • 打赏
  • 举报
回复
在template<...>之后的任何东西都意味着编译器在当时不为它分配存储空间,而是一直处于等待状态直到被一个模板实例(instant)告知。
在独立的cpp文件中放置模板的定义则依赖于具体编译器的实现,请查阅其说明文档
-----《Thinging in C++》
point_to 2003-07-10
  • 打赏
  • 举报
回复
用的编译器是vc么?
vc的原因!
blackblue 2003-07-10
  • 打赏
  • 举报
回复
原因何在,为什么非模板类的定义和声明就可以放在两个文件中?
能不能给详细说一下?

如果我在A.cpp的尾部加上
template class A1<false>;
template class A1<true>;
就没有编译错误了。
banjo 2003-07-10
  • 打赏
  • 举报
回复
: MaiCle(【不拉马的士兵】) 说的对
MaiCle 2003-07-10
  • 打赏
  • 举报
回复
你将A.cpp的文件全放入A.h中,试试。

模板的声明和实现都要在一个文件中。
blackblue 2003-07-10
  • 打赏
  • 举报
回复
对了,main函数是在testt.cpp中

64,650

社区成员

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

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