关于命名空间类编译成库后调用的不解.高手解答下... undefined reference to

yh4130a 2008-11-03 11:47:00
AAA.h

#ifndef __AAA__
#define __AAA__

namespace aaa
{
template<typename T>
class AAA
{
public:
AAA();
~AAA();
T Sum(T a, T b);
};
}

#endif


AAA.cpp
#include "AAA.h"

template<typename T>
aaa::AAA<T>::AAA()
{
}

template<typename T>
aaa::AAA<T>::~AAA()
{
}

template<typename T>
T aaa::AAA<T>::Sum(T a, T b)
{
return a + b;
}
g++ -g -D_REENTRANT -Wall -I/home/yanghao/c++/MQ1/include -c AAA.cpp -o AAA.o
ar rv libAAA.a AAA.o
r - AAA.o
ranlib libAAA.a
编译成库 libAAA.a


把AAA.h 与 libAAA.a cp 到另外一个地方
用 test.cpp 引用库

test.cpp
#include <string>
#include <iostream>
#include "AAA.h"

using namespace aaa;

int main()
{
AAA<int> ax;

std::cout<<ax.Sum(1, 2)<<std::endl;
return 0;
}

编译:
g++ -g -D_REENTRANT -Wall -lgcc_s -I/home/yanghao/c++/MQ2/include -c test.cpp -o test.o
g++32: -lgcc_s: linker input file unused because linking not done
g++ -o test -g -D_REENTRANT -Wall -lgcc_s test.o -L/usr/lib -L/home/yanghao/c++/MQ2/lib -lpthread -ldl -lAAA
test.o(.text+0x19): In function `main':
/home/yanghao/c++/MQ2/source/test.cpp:7: undefined reference to `aaa::AAA<int>::AAA()'
test.o(.text+0x2f):/home/yanghao/c++/MQ2/source/test.cpp:9: undefined reference to `aaa::AAA<int>::Sum(int, int)'
test.o(.text+0x54):/home/yanghao/c++/MQ2/source/test.cpp:9: undefined reference to `aaa::AAA<int>::~AAA()'
test.o(.text+0x71):/home/yanghao/c++/MQ2/source/test.cpp:9: undefined reference to `aaa::AAA<int>::~AAA()'
collect2: ld returned 1 exit status

但是在如果把AAA 的模板去掉 编译成库后,再拿到test里来编译 就没问题了,
不解 不知道这是个什么情况?
...全文
354 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
frank_ll 2008-11-03
  • 打赏
  • 举报
回复
模板的声明和定义要放到一个文件中
yh4130a 2008-11-03
  • 打赏
  • 举报
回复
顶上去
yh4130a 2008-11-03
  • 打赏
  • 举报
回复
哪位大哥来帮帮忙看看啊... 很郁闷。...
yh4130a 2008-11-03
  • 打赏
  • 举报
回复
楼上的大哥 能具体点么? 没明白你的意思?
实现的时候 都在 AAA 前加了 空间名称的 aaa::AAA
taodm 2008-11-03
  • 打赏
  • 举报
回复
AAA空间声明的东西也必须在AAA空间内定义。
yh4130a 2008-11-03
  • 打赏
  • 举报
回复
顶上去
yh4130a 2008-11-03
  • 打赏
  • 举报
回复
可以不放在一个文件里啊
这个很肯定
我去掉命名空间 也没问题...

64,636

社区成员

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

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