0

重複の可能性:
テンプレートを使用すると「未解決の外部シンボル」エラーが発生するのはなぜですか?
テンプレートをヘッダー ファイルにしか実装できないのはなぜですか?

たぶん私はそれにはあまりにも愚かですが、これは私にはうまくいきません:

フー。

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

返信ありがとうございます。

4

2 に答える 2

3

テンプレート メソッドの定義は、インスタンス化の時点で利用可能でなければなりません。メソッドの定義をヘッダー ファイルに配置してみてください。

于 2012-09-16T12:48:46.187 に答える
0

明示的なインスタンス化に煩わされたくない場合は、インライン定義を提供する必要があります。もう 1 つの解決策は、.cpp ファイルで明示的なインスタンス化を提供することです。

詳細については、 http://www.parashift.com/c++-faq-lite/separate-template-fn-defn-from-decl.htmlを参照してください。

于 2012-09-16T12:56:05.147 に答える