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)不能从传递给函数的参数中推导出来(这是您的情况,因为您的函数没有任何参数),您应该像这样调用函数:

测试<某些类型>();

于 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 回答