C++ 多文件编译问题

pzlvv 2011-08-03 01:01:46
//main.cpp
#include <iostream>
#include "include/A.h"
using namespace std;

int main()
{
A<int> a;
}

//A.h
#ifndef A_H
#define A_H

template <class T>
class A
{
public:
A();
virtual ~A();
protected:
private:
};

#endif // A_H

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

template <class T>
A<T>::A()
{
//ctor
}

template <class T>
A<T>::~A()
{
//dtor
}




为什么这段代码在code::blocks上会出现 undefined reference to A() 的错误?
...全文
57 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
懒得打字 2011-08-03
  • 打赏
  • 举报
回复
1.在.h文件的末尾加上#include "../src/A.cpp"
2.所有定义放在.h中
3.提前实例化相应的类
4.使用export关键字(针对edg前端编译器,gcc,vc就不支持了)
skyworth98 2011-08-03
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 jackyjkchen 的回复:]

模板情况特殊,似乎在编译器的实现上遇到了很大的障碍。

目前主流编译器只支持两种方式:

1.所有实现写入头文件

2.源文件里写实现,但需要在头文件里include cpp文件

export关键字是标准中说的,用于导出摸板,但即便是紧跟标准的gcc也没能实现!
[/Quote]

sp,个人以为,是由C++的模板的实现机制决定的
C++模板本质上是字符串替换……
jackyjkchen 2011-08-03
  • 打赏
  • 举报
回复
模板情况特殊,似乎在编译器的实现上遇到了很大的障碍。

目前主流编译器只支持两种方式:

1.所有实现写入头文件

2.源文件里写实现,但需要在头文件里include cpp文件

export关键字是标准中说的,用于导出摸板,但即便是紧跟标准的gcc也没能实现!
bdmh 2011-08-03
  • 打赏
  • 举报
回复
对于泛型,好像不能分开编译
就想叫yoko 2011-08-03
  • 打赏
  • 举报
回复
模板分离编译问题

你可以把A的定义放在.h中

或者百度谷歌找些资料看看

64,681

社区成员

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

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