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(顺便说一下,这个名字很糟糕 - 拥抱元音!)
  • 您正在尝试在 and 上使用索引器m1m2它们是类型的变量Mtrx。您尚未创建索引器。您要么需要使用m1._sqMtrx[i, j]etc,要么需要声明一个索引器,例如:

    public double this[int i, int j]
    {
        return _sqMtrx[i, j];
    }
    
  • 如果两个参数的大小不同,您的方法不会返回任何内容

从根本上说,我认为您应该重新考虑整个运营商。

于 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 回答