c++ - 缺少类模板“calc”的参数列表
问题描述
我正在尝试将“calc”类修改为更通用以接受双精度或浮点数。
class calc {
public:
int multiply(int x, int y);
int add(int x, int y);
};
int calc::multiply(int k1, int k2)
{
return k1 * k2;
}
int calc::add(int k1, int k2)
{
return k1 + k2;
}
这是我下面的实现,但我有一个错误 E0441:类模板“calc”的参数列表丢失(行:calc c;)。
template < class T>
class calc
{
public:
T multiply(T x, T y);
T add (T x, T y);
};
template < class T>
T calc<T>::multiply(T k1, T k2)
{
return k1 * k2;
}
template < class T>
T calc<T>::add(T k1, T k2)
{
return k1 + k2;
}
int main()
{
calc c;
std::cout << c.multiply(1, 5);
}
如何将类转换为模板类和函数?
解决方案
c++是一种强类型语言,这意味着您必须在声明时完全指定所有类型。如果calc
是模板化的,则不能声明:calc c
因为它没有完全指定类型。您必须提供模板参数calc
需要完全指定,例如:
calc<double> c
不过, TonyK 的回答已经完全涵盖了这一点。我写这篇文章是为了评论你正在重新发明轮子。您正在编写的功能已经以以下形式提供:
plus
做加法multiplies
做乘法
而这些不需要类。因此,即使类似:cout << 1 * 5
不满足您的需求,并且您需要通过创建仿函数对象以函数调用的形式执行此操作:
multiplies<double> foo;
cout << foo(1, 5);
推荐阅读
- python - 如何使用复杂或不规则的形状作为我的 roi 使用鼠标功能进行图像检测和跟踪?
- c# - Task.WaitAll 似乎有问题
- java - 如何为 spring-cloud-stream 配置 GlobalChannelInterceptor?
- javascript - 为什么 Javascript 对“2019-04-22”和“2019-4-22”的解析不同?
- c++ - 使用“使用”的模板模板成员继承
- swift - 如何转换下面的代码以让我扫描具有不同 .sks 文件的多个对象?
- javascript - 未捕获的 SyntaxError:无效的解构分配目标
- javascript - Three.js Transform Controls 导致卡顿
- reactjs - 如何使用 React 状态优化 Cloud Firestore 读取?
- javascript - 发布到对象数组