template static 连接错误LNK1120,LNK2019
我在整理代码时将一组常用函数打包成一个utility类,采用的方案就是静态化成员函数.但是遇到到了Link错误,原以为这个和以前的Link错误一样容易解决(又见link错误之LNK1104,VS2005中郁闷的lnk2001和lnk2019),没想到试了各种办法都失败,仅仅能编译通过,Link时不同的编译器产生不同的错误,VS6产生LNK1120,VS8产生LNK2019.
代码:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | class test { public: test; virtual ~test(); template static T Add(T t1, T t2) { return t1+t2; } }; int main(int argc, char* argv[]) { float f1=0.1f,f2=0.2f; int i=1,i2=2; printf("%f,%d",test_new::Add(f1, f2),test_new::Add(i, i2)); getchar(); return 0; } |
通过查各方的资料,没有找到以我这种模式的解决方案.如果你有好的解决方案,麻烦通知本人,谢谢(lokil_#_gmail.com).
我想了一下产生这种错误的原因,是由于Template是不静态编译的,之所以能通过编译,是由于编译器在编译期间,根本没有检测template,只是在调用的时候才去找,所需要的类型.所以就找不到了.
我的解决办法,是老老实实的去掉了static.汗.
4 条评论
昨天做作业的时候遇到了 LNK2001
人家说的对,编译错误容易解决,但是连接错误还真头痛!
特别在项目巨大且引用关系复杂时。
刚刚学模块,但是等老师讲类,我看还要下学期
自己多少有点接触,但是解决不到你的问题,
这个程序我也只能看懂部分
来凑凑热闹的说~~~呵呵,期待高手解决~~~~
哈哈.慢慢搞C++博大精深