0

可能重复:
为什么在使用模板时会出现“未解析的外部符号”错误?
为什么模板只能在头文件中实现?

也许我太愚蠢了,但这对我不起作用:

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
}

主文件

#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)

感谢您的回复!

4

2 回答 2

3

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

于 2012-09-16T12:48:46.187 回答
0

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

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

于 2012-09-16T12:56:05.147 回答