可能重复:
Why do I get “unresolved external symbol” errors when using templates?
Why can templates only be implemented in the header file?
也许我对它太愚蠢,但这对我不起作用:
foo.h中
#ifndef FOO_H
#define FOO_H
class Foo {
public:
template<typename T>
void foo(T const &);
};
#endif // FOO_H
Foo.cpp中
#include "Foo.h"
template<typename T>
void Foo::foo(T const &var) {
// do something useless
}
的main.cpp
#include "Foo.h"
int main() {
int i;
Foo bar;
bar.foo(i);
}
我只是使用Xcode 4.4.1编译,但它返回以下链接错误:
Undefined symbols for architecture x86_64:
"void Foo::foo<int>(int const&)", referenced from:
_main in main.o
ld: symbol(s) not found for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)
感谢您的回复!
答案 0 :(得分:3)
模板方法定义必须在实例化时可用。尝试将方法的定义放在头文件中。
答案 1 :(得分:0)
如果您不想使用显式实例化,则必须提供内联定义。 另一种解决方案是在.cpp文件中提供显式实例化。
有关详细信息,请参阅http://www.parashift.com/c++-faq-lite/separate-template-fn-defn-from-decl.html。