QQ登录

只需一步,快速开始

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 947|回复: 9

请教关于C++模板的编译问题

[复制链接]
发表于 2004-12-5 17:43:51 | 显示全部楼层 |阅读模式
问题示例如下:5个文件
//B.h
class B{
   public:
     B();
};

//B.cpp
#include<iostream>
#include"B.h"
#include<string>
using namespace std;
B::B(){
cout<<"come here B initialize"<<endl;
}

//templateclass.h
template <class A>
class tem{
public:
   tem();
private:  
   A a;
};

//templateclass.cpp
#include"templateclass.h"
#include<iostream>
#include"B.h"
using namespace std;
template<class A> tem<A>::tem():a()
{
  cout<<"come here tem initialize"<<endl;
}

//main.cpp
#include"templateclass.h"
#include"B.h"
int main()
{
   tem<B> a;
}

如下编译出现错误:
[root@localhost c++]# g++ B.cpp templateclass.cpp main.cpp -o test
/tmp/ccsPMjuS.o(.text+0x1: In function `main':
: undefined reference to `tem<B>::tem[in-charge]()'
collect2: ld returned 1 exit status
但是如果把main()函数移入templateclass.cpp中如下编译可通过且正确执行:
[root@localhost c++]# g++ B.cpp templateclass.cpp -o test
请问这是不是缺少g++的某些编译参数或文件中少了一些东东?
我的gcc 编译器为 3.2.2

谢谢指教!!
发表于 2004-12-6 15:13:02 | 显示全部楼层
在你能正确编译的第二种方法中,你使用了包含编译模式。
如果你想用第一种方法,分离tem类的定义与实现,那你要用分离编译模式,在templateclass.h的template前加上 export。只是-------------g++还不支持这种分离编译模式。所以你没得选择。要不像你做的第二种那样,要不把templateclass.cpp放在templateclass.h中(因为在main中包含了templateclass.h,所以实际上是一样的)
回复

使用道具 举报

 楼主| 发表于 2004-12-6 21:39:35 | 显示全部楼层
是不是就是说
tem<B> a;

using namespace std;
template<class A> tem<A>::tem():a()
{
cout<<"come here tem initialize"<<endl;
}

必须放在一个文件里编译,要不然连接器搞不定?
您的解释“分离编译模式 包含编译模式”“分离tem类的定义与实现”我不大懂。
有没有这方面的书籍或网站可查呀。
非常感谢,每次的问题都是您回答,非常感谢啊!
回复

使用道具 举报

发表于 2004-12-6 22:10:45 | 显示全部楼层
你说的对。
《c++ primer》
回复

使用道具 举报

 楼主| 发表于 2004-12-6 23:15:04 | 显示全部楼层
对不起,还有一个问题。有没有C++的联机帮助啊,比如说我想看string 这个类的有哪些成员函数,怎么在LINUX下查找啊!
您费心啦!
回复

使用道具 举报

发表于 2004-12-7 12:15:23 | 显示全部楼层
好像没有
回复

使用道具 举报

发表于 2004-12-7 13:05:23 | 显示全部楼层
呵呵
回复

使用道具 举报

 楼主| 发表于 2004-12-7 13:06:13 | 显示全部楼层
那就是说纯粹凭经验了!!
谢谢了!!
书中果然有描述。!
回复

使用道具 举报

发表于 2004-12-7 15:02:43 | 显示全部楼层
当然不是,你用的哪个编译器,这个编译器会有说明文档的。而且一般和标准c++一样。
回复

使用道具 举报

发表于 2005-3-21 20:02:25 | 显示全部楼层
http://dev.csdn.net/Develop/article/18/article/51/51269.shtm
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

GMT+8, 2024-11-6 11:45 , Processed in 0.080833 second(s), 16 queries .

© 2021 Powered by Discuz! X3.5.

快速回复 返回顶部 返回列表