未找到架构x86_64的符号意味着类型转换无法正常工作

kmi*_*las 2 c++ templates

Xcode 7.2.1编译器.

为什么这不会编译?我希望第二行可以推断出类型,但是我发布了错误.谢谢.

int square(int);
template <typename T>
T square(T x) { return x * x; }

int main() {
    cout << square<int>(2) << endl; //Compiles, works
    cout << square(2) << endl; // Error below!?
    cout << endl;
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

Sam*_*all 5

您正在声明一个函数以及一个模板函数.

int square(int);
Run Code Online (Sandbox Code Playgroud)

这说明square其他地方存在一些功能.

template <typename T>
T square(T x) { return x * x; }
Run Code Online (Sandbox Code Playgroud)

说有一个模板称为square任意类型.当您通过直接调用它时square<int>(2),显式引用该模板.当您尝试通过square(2)第一个推断它时,选择声明但未定义的函数int square(int),并且您得到未定义的引用错误.

我相信你只想要一个模板化的函数,所以你应该int square(int)完全删除它.