错误 C2228:".values"的左侧必须具有类/结构/联合

error C2228: left of '.values' must have class/struct/union

本文关键字:联合 结构 C2228 values 错误      更新时间:2023-10-16

我试图在C++上学习一些运算符重载方法,然后我遇到了这个错误:

错误

7 错误 C2228:".values"的左侧必须具有类/结构/联合

还有另一个错误说:

错误

4 错误 C2065:"sum":未声明的标识符

Matrix<type> Matrix<type>::operator+(const Matrix& m){
    if(num_of_rows != m.num_of_rows || num_of_cols != m.num_of_cols) // Checking if they don't have the same size.
    Matrix<type> *sum;
    sum = new Matrix<type>(num_of_rows, num_of_cols);
    for(int i = 0; i < num_of_rows; i++)
        for(int j = 0; j < num_of_cols; j++)
            sum.values[i][j] =  values[i][j] + m.values[i][j];
    return *sum;
}

有人能告诉我我哪里做错了?

在您发布的代码中,sum是一个指针。因此,要访问对象的成员,您需要使用 ->

sum->values[i][j] = ...

您似乎在声明Matrix<type> *sum;后也缺少一个分号,但目前尚不清楚这是转录错误还是您的代码是否真的看起来像那样。

最后,您的内存管理泄漏了一个对象。您使用 new 分配对象,但返回该对象的副本,并且永远不会释放它。也许你想要这样的东西:

Matrix<type> sum(num_of_rows, num_of_cols);
for ( ... )
    sum.values[i][j] = ..
return sum;