我正在尝试将“ calc”类修改为更通用,以接受double或float。
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);
}
如何将类转换为模板类和函数?
答案 0 :(得分:1)
编译器如何知道您想要哪种calc
?您必须告诉它:
calc<int> c;
或
calc<double> c;
或...
答案 1 :(得分:1)
c++是一种强类型语言,这意味着您必须在声明时完全指定所有类型。如果calc
是模板化的,则不能声明:calc c
,因为它没有完全指定类型。您必须提供必须完全指定的模板参数calc
,例如:
calc<double> c
TonyK's answer已经完全涵盖了这一点。我写这篇文章是为了评论您正在重新发明轮子。您正在编写的功能已经可以通过以下方式获得:
plus
进行加法multiplies
进行乘法并且这些不需要课程。因此,即使类似cout << 1 * 5
之类的内容无法满足您的需要,您也需要通过创建函子对象以函数调用的形式来实现此目的:
multiplies<double> foo;
cout << foo(1, 5);