C++ 为类方法创建模板

C++ 为类方法创建模板,c++,class,templates,methods,C++,Class,Templates,Methods,可能重复: 也许我太蠢了,但这不适合我: Foo.h #ifndef FOO_H #define FOO_H class Foo { public: template<typename T> void foo(T const &); }; #endif // FOO_H 我只是使用Xcode 4.4.1编译,但它返回以下链接错误: Undefined symbols for architecture x86_64: "void Foo::foo&

可能重复:

也许我太蠢了,但这不适合我:

Foo.h

#ifndef FOO_H
#define FOO_H

class Foo {
public:
    template<typename T>
    void foo(T const &);
};

#endif // FOO_H
我只是使用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)
架构x86_64的未定义符号: “void Foo::Foo(int const&)”,引用自: _主音中的主音 ld:找不到架构x86_64的符号 叮当声:错误:链接器命令失败,退出代码为1(使用-v查看调用)
谢谢你的回复

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

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

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


有关更多信息,请参阅。

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


有关更多信息,请参阅。

很想知道为什么您认为这会起作用。这是将实现与类定义分开的标准方法,对吗?@Vikdor right…除非该方法是模板方法。谢谢!在.cpp文件中没有任何方法可以这样做吗?@Coodey如果它是一个模板,就没有了,哦!谢谢,我从来不知道:(很想知道你为什么认为这会起作用。这是一种将实现与类的定义分开的标准方法,对吗?@Vikdor right…除非该方法是一个模板方法。谢谢!在.cpp文件中没有任何方法可以这样做吗?@Coodey如果它是一个模板,就没有了。哦!谢谢,我从来不知道:(我们真的有了…它的模板星期天又一次:-)我们真的有了…它的模板星期天又一次:-)
#include "Foo.h"

int main() {
    int i;
    Foo bar;
    bar.foo(i);
}
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)