0

私は小さなコンソールアプリを書いています。何が悪いのかわかりません...

namespace Mtrx
{
    class Mtrx
    {
        private double[,] _sqMtrx;
        private double _mtrxSize { get; set; }

        public Mtrx(int i)
        {

            if (i <= 0)
                throw new FormatException();
            else
                this._sqMtrx = new double[i, i];
            _mtrxSize = i;
        }

        public static Mtrx operator +(Mtrx m1, Mtrx m2)
        {
            if (m1._mtrxSize == m2._mtrxSize)
            {
                for (int i = 1; i <= m1._mtrxSize; i++)
                {
                    for (int j = 1; j <= m1._mtrxSize; j++)
                    {
                        return m1[i, j] == m1[i, j] + m2[i, j];
                    }
                }
            }
        }
    }
}

そして私は得る:タイプ「Mtrx.Mtrx」の式に[]を使用してインデックスを適用することはできません

4

3 に答える 3

8

そうです、問題はここにあります:

return m1[i, j] == m1[i, j] + m2[i, j];

これはあらゆる点で間違っています。

  • bool演算子が a を返すことを意図しているときにa を返そうとしていますMtrx(ちなみに、ひどい名前です - 母音を受け入れてください!)
  • タイプ の変数であるm1およびでインデクサーを使用しようとしています。インデクサーを作成していません。etcを使用する、次のようなインデクサーを宣言する必要があります。m2Mtrxm1._sqMtrx[i, j]

    public double this[int i, int j]
    {
        return _sqMtrx[i, j];
    }
    
  • 2 つの引数のサイズが異なる場合、メソッドは何も返しません

基本的にオペレーター全体を考え直すべきだと思います。

于 2013-04-03T20:29:30.853 に答える
2

オブジェクト内の配列にアクセスするのではなく、配列のようにオブジェクトにアクセスしようとしています。試すm1._sqMatrix[i,j]

于 2013-04-03T20:29:31.270 に答える
1

ネストされた for ループの最も内側の行は、mr1、mr2 変数ではなく、配列を参照するべきではありませんか?

    public static Mtrx operator +(Mtrx m1, Mtrx m2)
    {
        if (m1._mtrxSize == m2._mtrxSize)
        {
            var outVal = new Mtrx(m1._mtrxSize)

            for (int i = 1; i <= m1._mtrxSize; i++)
                for (int j = 1; j <= m1._mtrxSize; j++)
                    outVal._sqMtrx[i,j] = m1._sqMtrx[i, j] + m2._sqMtrx[i, j];

            return outVal;
        }
    }

クラス自体でインデックス構文を使用する場合は、インデクサーを追加する必要があります....

class Mtrx
{
    private double[,] _sqMtrx;
    private int _mtrxSize { get; set; }

    public Mtrx(int i)
    {

        if (i <= 0)
            throw new FormatException();
        else
            this._sqMtrx = new double[i, i];
        _mtrxSize = i;
    }

    public double this[int i, int j]
    {  
        get { return _sqMtrx[i, j]; }
        set { _sqMtrx[i, j] = value; }
    }

    public static Mtrx operator +(Mtrx m1, Mtrx m2)
    {
        if (m1._mtrxSize == m2._mtrxSize)
        {
            var outVal = new Mtrx(m1._mtrxSize)

            for (int i = 1; i <= m1._mtrxSize; i++)
                for (int j = 1; j <= m1._mtrxSize; j++)
                    outVal[i,j] = m1[i, j] + m2[i, j];

            return outVal;
        }
    }
}
于 2013-04-03T20:38:07.813 に答える