我有以下代码,我想将运算符重载应用于:
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<int> c;
std::cout << c.multiply(1, 5);
}
我尝试实现运算符重载,但出现错误:E0415不存在合适的构造函数来将“ int”转换为“ calc”。行:calc a(1);
#include <iostream>
using namespace std;
template < class T>
class calc
{
public:
T x;
T y;
};
template < class T>
calc<T> operator*(calc<T> const& k1, calc<T> const& k2)
{
calc<T> ret;
ret.x = k1.x * k2.x;
return ret;
}
int main()
{
calc<int> a(1);
calc<int> b(5);
calc<int> result;
return 0;
}
答案 0 :(得分:0)
使用类时,必须有一个称为构造函数的东西,它将初始化该类。这样,该类的变量将被设置并可以在成员函数中使用。构造函数没有返回类型(甚至没有void),并且总是以类的名称命名。因此,在您的情况下,代码将如下所示:
calc<T> (int value)
{
x=value;
}
或
calc<T> (int value)
{
y=value;
}
在您的第一个代码示例中,程序将调用由编译器自动为您创建的默认构造函数。看起来像这样:
calc<T> ()
{
//since there is nothing to assign. Do nothing.
}
但是,如果您要在第二个代码示例中调用默认构造函数,则将为此x和y值分配默认值T 编译器。
现在有了构造函数,该对象中的项目就会保存。因此,a.x 或a.y等于发送到构造函数的值。 (在您的情况下为1)。