先看能编译通过的例子,如下在同一个文件 a.cpp 中:
class A{
public:
template <typename T> void r(T& t){}
};
int main(){
A objA;
int i = 1;
objA.r(i);
}
上面的例子使用 g++ a.cpp -o a 是可以编译通过的.
现在,把 class A 拆分成.h 文件和.cpp 文件:
a.h :
class A{
public :
template <typename T> void r(T&);
};
a.cpp :
#include "a.h"
template <typename T> void A::r(T& t){}
m.cpp :
#include "a.h"
int main(){
A objA;
int i = 1;
objA.r(i);
}
然后编译:
g++ -c a.cpp -o a.o
g++ -c main.cpp -o main.o
g++ a.o main.o -o final
然后竟然报错了,说是 undefined void A::r<int>(int&)
这是什么鬼,求解答.
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.