使用多个操作员与操作员重载会产生奇怪的错误
Using multiple operators with operator overloading gives strange error
我有一个称为floattensor的单个类。我对 和 *的运算符超载。这是代码。
class FloatTensor {
public:
float val; // value of tensor
float grad; // value of grad
Operation *frontOp =NULL, *backOp =NULL;
FloatTensor* two;
FloatTensor() {
// default
}
FloatTensor(float val) {
this->val = val;
}
FloatTensor(float val, Operation* op) {
this->val = val;
this->backOp = op;
}
void backward(float grad) {
this->grad = grad;
if(this->backOp != NULL) {
this->backOp->backward(grad);
}
}
FloatTensor exp() {
this->frontOp = new ExponentOperation(this);
return this->frontOp->compute();
}
FloatTensor operator * (FloatTensor &two) {
this->frontOp = new MultiplyOperation(this, &two);
return this->frontOp->compute();
}
FloatTensor operator + (FloatTensor &two) {
this->frontOp = new AddOperation(this, &two);
return this->frontOp->compute();
}
FloatTensor operator / (FloatTensor &two) {
this->frontOp = new DivideOperation(this, &two);
return this->frontOp->compute();
}
};
在我尝试简单的过载时,在我的主要功能中,情况很棒
int main() {
// X
FloatTensor x1(200); // heap declaration
FloatTensor x2(300);
// Weights
FloatTensor w1(222);
FloatTensor w2(907);
FloatTensor temp = (x1*w1);
}
但是,当我尝试与更多运算符这样的操作员超载
int main() {
// X
FloatTensor x1(200); // heap declaration
FloatTensor x2(300);
// Weights
FloatTensor w1(222);
FloatTensor w2(907);
FloatTensor temp = (x1*w1) + (x2*w2);
}
我得到此错误:
no operator "+" matches these operands -- operand types are: FloatTensor + FloatTensor
如果有人能解释为什么会发生这种情况,我将非常感激。我观察到这有效:
x1*w1*x2*x1;
x1*w1 + x2;
但x1*w1 + x2*w2
没有。
非常奇怪..
您的操作员接受非const
lvalue参考作为参数。临时性不与非const
LVALUE参考结合。要接受临时性,请使用:
FloatTensor operator + (const FloatTensor &two)
相关文章:
- 为什么我的作业操作员给出了损坏错误
- 操作员=在两个std :: chrono :: time_point引起错误之间
- 无操作员错误代码
- 在定义C2679和C2678错误代码的地方未找到二进制操作员
- 使用流操作员构建错误
- 错误:“操作员^”无匹配
- 使用多个操作员与操作员重载会产生奇怪的错误
- 使用%操作员时双重错误
- 错误:“ const char*”类型的操作数和“ const char [7]”类型为二进制“操作员 ”
- 新的操作员帮助,类型分配器和其他错误
- 学习OOP:超载 OR =操作员错误
- 为什么我无法使错误操作员()无法超载
- 通过使用新操作员创建对象会导致未解决的外部符号错误C FTGL
- 超载流提取操作员错误
- 与操作员错误不匹配
- 过载<<操作员错误
- 捕获块使我无法与操作员错误相匹配
- Visual Studio中的操作员错误(错误C2784)
- OpenCV:操作员"+"错误;加法
- 井字 - 操作员*错误不匹配