缺少 class 模板 "calc" 的参数列表
Argument list for class template "calc" is missing
我正在尝试修改 class “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:缺少 class 模板 "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);
}
如何将 class 转换为模板 class 和函数?
编译器如何知道你想要什么样的calc
?你必须告诉它:
calc<int> c;
或
calc<double> c;
或...
c++ 是一种强类型语言,这意味着您必须在声明时完全指定所有类型。如果 calc
是模板化的,则不能声明: calc c
因为它没有完全指定类型。您必须提供模板参数 calc
要求完整指定,例如:
calc<double> c
已经完全涵盖了这一点。我写这篇评论是为了评论你正在重新发明轮子。您正在编写的功能已经以以下形式提供:
plus
做加法
multiplies
做乘法
而且这些不需要 class。所以即使像这样的东西: cout << 1 * 5
不满足你的需求,你需要通过创建一个仿函数对象以函数调用的形式来实现它:
multiplies<double> foo;
cout << foo(1, 5);
我正在尝试修改 class “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:缺少 class 模板 "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);
}
如何将 class 转换为模板 class 和函数?
编译器如何知道你想要什么样的calc
?你必须告诉它:
calc<int> c;
或
calc<double> c;
或...
c++ 是一种强类型语言,这意味着您必须在声明时完全指定所有类型。如果 calc
是模板化的,则不能声明: calc c
因为它没有完全指定类型。您必须提供模板参数 calc
要求完整指定,例如:
calc<double> c
plus
做加法multiplies
做乘法
而且这些不需要 class。所以即使像这样的东西: cout << 1 * 5
不满足你的需求,你需要通过创建一个仿函数对象以函数调用的形式来实现它:
multiplies<double> foo;
cout << foo(1, 5);