1

C ++でいくつかの演算子オーバーロードメソッドを学習しようとしたところ、次のエラーが発生しました:

エラー7エラーC2228:「。values」の左側にはclass / struct/unionが必要です

次のような別のエラーもあります。

エラー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;
}

誰かが私が間違った場所を教えてもらえますか?

4

1 に答える 1

2

あなたが投稿したコードで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;
于 2012-05-13T20:01:22.620 に答える