很菜的问题,模板程序异常

dfwdfw 2004-07-12 07:38:20
我用的是Microsoft Visual Studio .NET 2003开发工具,语言是c++,我自己写了个树的算法,把类定义什么放到.h文件里,实现放到另一个cpp文件里,在另一个cpp文件里调用,我把相应的头文件什么的都加了,为什么老是提示连接错误:无法解析的外部符号,好面跟了一大堆相应提示,如果不写调用的语句是可以编译通过的,为什么调用就不好使了呢,我看有些书上要在template前加export上,我用了下,没什么效果,希望高人指点。
...全文
116 点赞 收藏 14
写回复
14 条回复
kim1977 2004年07月13日
Microsoft Visual Studio .NET 2003编译器都出来了,肯定有个什么方法支持模板代码的分离编译,除非有人拿出Microsoft的某个声明说现在不支持模板代码的分离编译,否则解答怎么让人接受,我出的100分呀,希望不知道的不要误导。
---------------------------
唉,真是让人寒心啊。
回复 点赞
Wolf0403 2004年07月13日
不知道的不要误导……那么我是误导好呢还是不要误导的好?

不管了,先贴再说。
MSDN 2003 里面说:

The export keyword is not supported on templates. For example, the following sample will not compile:

export template <class T> void fun(T);
export template <class T> class A;

人家 MS 自己都承认了,你就不要在这里……啊?
回复 点赞
expert2000 2004年07月13日
弱弱的问一句,是不是要放到一个工程中去?(我对vc不熟)
回复 点赞
dfwdfw 2004年07月13日
Microsoft Visual Studio .NET 2003编译器都出来了,肯定有个什么方法支持模板代码的分离编译,除非有人拿出Microsoft的某个声明说现在不支持模板代码的分离编译,否则解答怎么让人接受,我出的100分呀,希望不知道的不要误导。
回复 点赞
bm1408 2004年07月13日
本版面最~最最最最最~最最最~古老的问题之一:模板代码的分离编译问题。

截至目前位置,主流编译器仍然不支持模板程序的分离编译,既定义与生命分离在不同文件终的方式进行编译。虽然 C++ Primer 终提到可以用 export 关键字,但是主流 C++ 编译器还没有正式的、完全的对它的支持,因此到目前位置,我们仍然不得不把代码写成传统的声明——定义都在 .h 中的形式,以防止链接错误。

强烈agree!!!!!!!
回复 点赞
pacman2000 2004年07月13日
不调用就没有实例化啊,相当于根本没有产生代码。
回复 点赞
dfwdfw 2004年07月13日
那我分开写不调用为什么能编译通过呢。
回复 点赞
kim1977 2004年07月13日
Wolf0403兄说的“因此到目前位置,我们仍然不得不把代码写成传统的声明——定义都在 .h 中的形式,以防止链接错误。”就是你这个问题的答案。

“现在迷惑的是template的头和实现是分开写的”不能分开写。
回复 点赞
dfwdfw 2004年07月13日
现在迷惑的是template的头和实现是分开写的,编译没有什么问题呀,为什么调用的时候就提示连接错误呢,我用的是Microsoft Visual Studio .NET 2003,希望有实作的人指点。
回复 点赞
dfwdfw 2004年07月13日
解答问题,不要就字面意思在那饶舌了,我是看些无谓的跟贴才那样说,你能解答我的疑惑我肯定会感谢你,废话什么呢,我问问题又不是在这找人在字面上饶舌,我还是想问Microsoft Visual Studio.NET 2003方面有没有template分离编译方面的详细的官方解释呢,如有知道的希望能详细指点一下。export这个关键字我也找了,能解决什么呢,我想知道的是template分离编译方面在Visual Studio.NET 2003中是怎么处理的,如果不支持,在那可找到相应的说明。为了避免无谓的就言语方面的争论先结贴了,还是感谢Wolf0403(完美废人)一再跟贴的热心帮助,加100分表示了。希望如能解答我疑惑的继续跟贴或发送留言给我吧。
回复 点赞
steel007 2004年07月12日
楼上说的相当~相当~清晰了~
回复 点赞
Wolf0403 2004年07月12日
本版面最~最最最最最~最最最~古老的问题之一:模板代码的分离编译问题。

截至目前位置,主流编译器仍然不支持模板程序的分离编译,既定义与生命分离在不同文件终的方式进行编译。虽然 C++ Primer 终提到可以用 export 关键字,但是主流 C++ 编译器还没有正式的、完全的对它的支持,因此到目前位置,我们仍然不得不把代码写成传统的声明——定义都在 .h 中的形式,以防止链接错误。
回复 点赞
xjp6688 2004年07月12日
up
回复 点赞
qybao 2004年07月12日
你确定用到的头文件都包含进来了吗
把代码贴出来看看
标明一下你用到了哪些template,用到了哪些头文件
最好在你的template前加上 ::std::
回复 点赞
发动态
发帖子
工具平台和程序库
创建于2007-09-28

8235

社区成员

2.7w+

社区内容

C/C++ 工具平台和程序库
社区公告
暂无公告