专业化的返回类型和主模板必须匹配:
templatefloat hz_to_nsec(const T &freq) { return freq != 0 ? static_cast (NSEC_PER_SEC) / freq : 0; } template <> float hz_to_nsec (const double &freq) { ^^^^^ return freq != 0 ? static_cast (NSEC_PER_SEC) / freq : 0; ^^^^^ }
或者,您可以提供重载而不是模板特化:
templatefloat hz_to_nsec(const T &freq) { return freq != 0 ? static_cast (NSEC_PER_SEC) / freq : 0; } double hz_to_nsec(const double &freq) { return freq != 0 ? static_cast (NSEC_PER_SEC) / freq : 0; }
@ 101010的答案解决了您的模板错误.但是,您不需要第二个函数作为模板特化.它可能只是一个过载.
// template <> // No need to use template specialization. // Just use an overload. double hz_to_nsec(double freq) { return freq != 0 ? static_cast(NSEC_PER_SEC) / freq : 0; }