0

次のような目的のcでc ++テンプレート関数を呼び出そうとしています:

template<typename T>
void test() {
    ...

    std::cout << "hello world! \n";
}

呼び出しで次のエラーが発生しますtest()

Undefined symbols for architecture armv7:
"test()", referenced from:
 -[viewController onNext] in ViewController.o
ld: symbol(s) not found for architecture armv7
clang: error: linker command failed with exit code 1 (use -v to see invocation)

取り出すtemplate<typename T>と問題なく動作しますが、テンプレートを必要とする C++ ライブラリのいくつかの関数を使用する必要があり、それを回避できません。何が起こっているかについて何か考えはありますか?

私はこれまでにC ++の経験がありません...

4

2 に答える 2

3

C++ では、テンプレート化された関数を呼び出すときに、関数に渡されたパラメーターからテンプレート パラメーター (つまり、コード内の T) を推測できない場合 (関数にはパラメーターがないため、これはあなたの場合です)、次のように関数を呼び出します。

test< someType >();

于 2012-08-01T23:58:36.477 に答える
1

C ++の場合:

  • void test()
  • template<>void test<int>()
  • template<>void test<float>()

(例として)はすべて異なる記号です。テンプレート/パラメータを削除すると、で呼び出したものと一致する別のシンボルになります-[viewController onNext]

于 2012-08-02T00:16:11.977 に答える