为类方法创建模板

时间:2012-09-16 12:45:55

标签: c++ class templates methods

  

可能重复:
  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)

感谢您的回复!

2 个答案:

答案 0 :(得分:3)

模板方法定义必须在实例化时可用。尝试将方法的定义放在头文件中。

答案 1 :(得分:0)

如果您不想使用显式实例化,则必须提供内联定义。 另一种解决方案是在.cpp文件中提供显式实例化。

有关详细信息,请参阅http://www.parashift.com/c++-faq-lite/separate-template-fn-defn-from-decl.html