【问题标题】:error C2228: left of '.values' must have class/struct/union错误 C2228:“.values”左侧必须有类/结构/联合
【发布时间】:2012-05-13 19:59:44
【问题描述】:

我试图在 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;
}

谁能告诉我哪里做错了?

【问题讨论】:

    标签: c++ sum overloading operator-keyword


    【解决方案1】:

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

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

    在声明 Matrix&lt;type&gt; *sum; 之后,您似乎还缺少一个分号,但尚不清楚这是转录错误还是您的代码是否真的如此。

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

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

    【讨论】:

    • 谢谢,我早该知道的。是的,我的代码的某些部分在发布时以某种方式被删除了,if 块中也应该有一个 throw。
    猜你喜欢
    • 2014-01-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-08-03
    • 1970-01-01
    相关资源
    最近更新 更多