0

main.cppでこの行を使おうとすると:

m3.array = m1.array+m2.array;

ここで、m3、m1、およびm2はすべてクラスタイプMatrixのオブジェクトであり、int[3][3]配列を使用します-タイプint[3][3]およびint[の互換性のない割り当てを処理するエラーが発生し続けます。 3][3]「+」を操作します。私はプログラムをコンパイルするためのコンピューターを持っていないので、正確なエラーはわかりません。

これが私が持っているmatrix.cppです:

#include <iostream>
#include <string>
#include "matrix.h"

using namespace std;

Matrix::Matrix()
{
    m1.array = 0;
}

istream& opeator >>(istream& inp, Matrix& m1)
{
         int i, j;

         for (i = 0; i < 3;i++)
         {
             for (j=0; j < 3;j++)
             {
                 inp >> m1.array[i][j];
             }
         }
         return inp;
}
ostream& operator <<(istream& outp, Matrix& m1)
{
         int i, j;
         for (i = 0;i<3;i++)
         {
             for (j = 0;j<3;j++)
             {
                 out<<m1.array[i][j]<<" "<<endl;
             }
         }
         return outp;
}

Matrix operator + (const Matrix& m1, const Matrix& m2)
{
        Matrix answer;
        int i,j;
        for (i = 0;i<3;i++)
        {
            for (j = 0;j<3;j++)
            {
                answer.array[i][j] = m1.array[i][j] + m2.array[i][j];
            }
        }
        return answer;
}

Matrix operator - (const Matrix& m1, const Matrix& m2)
{
        Matrix answer;
        int i, j;
        for (i = 0;i<3;i++)
        {
            for (j = 0;j<3;j++)
            {
                answer.array[i][j] = m1.array[i][j] - m2.array[i][j];
            }
        }
        return answer;
}

Matrix operator * (const Matrix& m1, const matrix& m2)
{
       Matrix answer;
       int i, j, k;
       for (i = 0;i<3;i++)
       {
           for (j = 0; j<3;j++)
           {
               for (k = 0; k<3;k++)
               {
                   answer.array[i][j] = m1.array[i][k] + m2.array[k][j];
               }
           }
       }
       return answer;
}

およびmatrix.h:

#ifndef MATRIX_H
#define MATRIX_H

using namespace std;

class Matrix
{
      public:
             Matrix();
             friend istream& operator >>(istream&, Matrix&);
             friend ostream& operator <<(ostream&, const Matrix&);
             friend Matrix& operator +(const Matrix&, const Matrix&);
             friend Matrix& operator -(const Matrix&, const Matrix&);
             friend Matrix& operator *(const Matrix&, const Matrix&);
             int array[3][3];

};




#endif
4

2 に答える 2

3
Matrix operator + (const Matrix& m1, const Matrix& m2)

Matrixこれは、2つのオブジェクト を追加する方法をコンピューターに指示します。

m3.array = m1.array+m2.array;

m1およびm2Matrixオブジェクトですが、そうでm1.arrayはありません。 それint[3][3]オブジェクトです。幸いなことに、修正は非常に簡単です。

m3 = m1 + m2;
于 2012-11-27T17:26:55.160 に答える
1

メンバーarrayはタイプint[3][3]です。C++では意味のない2つの多次元配列を追加しようとしています。

私はあなたが本当に欲しいものは次のとおりだと思います:

m3 = m1 + m2;

これは、オーバーロードされた演算子を呼び出します。

他にも疑わしいのは、友達の宣言と実際の定義が一致していないことです。返品タイプは異なります。

于 2012-11-27T17:26:15.287 に答える