LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 678|回复: 8

请问这个function template 有什么错?

[复制链接]
发表于 2004-12-16 19:27:18 | 显示全部楼层 |阅读模式
A.h
Class A
{
public:
A();
B* b;
}

B.h
Class B
{
public:
B();
template<typename T>
std::string toString(const T);
}

当我在A.c 里面用b->toString(2)的时候,toString函数应该返回2,但是是string类型,编译可以通过,可是 linking时候出错,说 b->toString(2)有错,undefined reference to std::string B::toString<int>(int)

请问这如何错了?怎么改?
发表于 2004-12-17 10:37:46 | 显示全部楼层
a.c或者a.h有include b.h吗?
 楼主| 发表于 2004-12-17 13:50:47 | 显示全部楼层
yes,
发表于 2004-12-17 14:25:10 | 显示全部楼层
template<typename T>
std::string toString(const T);

俺对C++不熟,随便问问,这里为啥要有 const
发表于 2004-12-17 16:45:10 | 显示全部楼层
最初由 doubleelec 发表
template<typename T>
std::string toString(const T);

俺对C++不熟,随便问问,这里为啥要有 const

这个应该是为了让下面的代码通过
const int a;
toString(a);
发表于 2004-12-17 18:25:58 | 显示全部楼层
楼主用toString(2);
编译器似乎将2解释为int而非const int

不妨改成toStirng((const int)2);试试
或者定义的时候不要加const
 楼主| 发表于 2004-12-20 15:36:09 | 显示全部楼层
错误的原因是,
在C++里面,template function 的声名和实现必须要在同一处。

也就是说,
template<typename T>
std::string toString(const T);
这个function的实现也要在 B.h里面。
 楼主| 发表于 2004-12-20 15:44:10 | 显示全部楼层
to doubleelec:
const 在C++里面没有什么特殊意义,比如说我上面写的这个const ,这里用const的原因是,告诉编译器,T 后的这个参数的值,不能被改变,如果这个参数出现在等号的左边,编译器就会报错了说这个参数是const,不能被改变。
anyway,thanks everyone !
发表于 2004-12-20 15:58:27 | 显示全部楼层
just so so
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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