急, 来者有分,在线!!!
我有三个文件:
//node.h
#include <iostream>
using namespace std;
#ifndef NODE_H
#define NODE_H
template <class Type>
class Node
{
public:
Node();
~Node();
};
#endif
//node.cpp
#include "node.h"
#include <iostream>
using namespace std;
template <class Type>
Node<Type>::Node()
{
cout << "Constructor called" << endl;
}
template <class Type>
Node<Type>::~Node()
{
cout << "Destructor called" << endl;
}
//main.cpp
#include <iostream>
#include "node.h"
using namespace std;
int main()
{
Node<int> node_1;
return 0;
}
G++中我
g++ -g -c node.cpp
g++ -g -c main.cpp
g++ -g -o sim.out node.o main.o
error message:Undefined first referenced
symbol in file
List_T<int>::~List_T(void) main.o
List_T<int>::List_T(void) main.o
ld: fatal: Symbol referencing errors. No output written to sim.out
在VC中也有类似的问题..
应该怎么办....
问题点数:0、回复次数:18Top
1 楼zhenming_liu()回复于 2003-05-02 02:51:03 得分 0
sorry
List_T<int>::~List_T(void) main.o
List_T<int>::List_T(void) main.o
should be
Node<int>::~Node(void) main.o
Node<int>::Node(void) main.o
Top
2 楼chinajiji(菜鸟叽叽)回复于 2003-05-02 03:02:18 得分 0
对于大多数编译器来说,template class的定义与声明应放在同一个*.h中,否则就会出现你说的那种错误,如果你实在想将template的声明与定义放在不同的文件里,请参见:
http://expert.csdn.net/Expert/topic/1464/1464686.xml?temp=.9609949Top
3 楼ghtsao(月之暗面)回复于 2003-05-02 03:09:24 得分 0
??,似乎没有问题。Top
4 楼ghtsao(月之暗面)回复于 2003-05-02 03:12:04 得分 0
哦,果然C++高手,见识了。Top
5 楼zhenming_liu()回复于 2003-05-02 03:28:09 得分 0
但是怎么将member function instantial?Top
6 楼ToUpdate(老六)回复于 2003-05-02 03:59:32 得分 0
UPTop
7 楼zhenming_liu()回复于 2003-05-02 04:37:58 得分 0
最后一个问题, 是不是只要实例化一个MEMBER FUC, 其他就不用了, 好象G++中是这样的...Top
8 楼chinajiji(菜鸟叽叽)回复于 2003-05-02 12:59:00 得分 0
如果template 的声明与定义分别放在不同的文件里时,"只要实例化一个MEMBER FUC, 其他就不用了,"是不行的.Top
9 楼solotony(solotony)回复于 2003-05-02 14:24:50 得分 0
如果你的编译器支持export的话,到是可以试一试分离,不然。。。
如果编译器支持函数级连接,到是可以试一试只实例化用到的成员函数,不实例化其它,不然。。
Top
10 楼zhenming_liu()回复于 2003-05-03 03:46:24 得分 0
但是我在g++下只实例化了一个MEMBER FUNC然后就能成功编译了....
为什么....
先结掉另一个相同的贴吧...有点信誉:)Top
11 楼bigtea(企鹅)回复于 2003-05-03 04:02:13 得分 0
我来up啦,记住给分阿。Top
12 楼zhenming_liu()回复于 2003-05-03 04:28:14 得分 0
或许, 能看看我的整个文件吧:
http://ihome.ust.hk/~cs_lzm/comp151/Top
13 楼tchatcha(沧桑,孤独,浪漫,但执着!)回复于 2003-05-03 08:15:26 得分 0
不知道帮你顶一下涨涨人气
Top
14 楼justaseeker(MS)回复于 2003-05-03 08:23:32 得分 0
简单说,template class的定义与声明应放在同一个*.h中Top
15 楼zhenming_liu()回复于 2003-05-04 19:42:51 得分 0
up..Top
16 楼snipersu()回复于 2003-05-04 20:49:16 得分 0
来晚了.
up一下.Top
17 楼huson(星芯)回复于 2003-05-04 21:27:23 得分 0
不错,太多高手了!
顶一下!Top
18 楼xiaoyuer0851(红旗下的蛋)回复于 2003-05-04 21:33:33 得分 0
呵呵,学习!~~~
这个方面刚好也不怎么懂!~~~Top




