首页 > 解决方案 > 缺少类模板“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++templatesmathfloating-pointclass-template

解决方案


是一种强类型语言,这意味着您必须在声明时完全指定所有类型。如果calc是模板化的,则不能声明:calc c因为它没有完全指定类型。您必须提供模板参数calc需要完全指定,例如:

calc<double> c

不过, TonyK 的回答已经完全涵盖了这一点。我写这篇文章是为了评论你正在重新发明轮子。您正在编写的功能已经以以下形式提供:

而这些不需要类。因此,即使类似:cout << 1 * 5不满足您的需求,并且您需要通过创建仿函数对象以函数调用的形式执行此操作:

multiplies<double> foo;

cout << foo(1, 5);

Live Example


推荐阅读