获取新创建的堆栈溢出错误 类

Getting Stack Overflow Error on newly created classes

我正在重构我的 8080 Space Invaders 模拟器。我已经将一些方法移动到 CPU class 中,将其他方法移动到 _8080 class 中。我正在使用 Visual Studio,所以有一个 MainForm class。现在,当我 运行 程序时,我在 _8080 class 中的 CPU class 声明中收到堆栈溢出错误。问题是,当我删除它进行测试时,我在 MainForm 声明中得到它,然后在 CPU class 中我得到它用于 class.[=16 中的相同声明=]

这是_8080的全部class

namespace SpaceInvaders
{
    class _8080
    {
        private CPU cpu = new CPU(); // ERROR IS THROWN HERE **
        private MainForm MainForm = new MainForm();

        public void StartEmulator()
        {
            cpu.initialiseEmulator(); // Reset 

            LoadProgram("invaders.rom"); // Load ROM

            cpu.emulateCPU();
        }

        private bool LoadProgram(string filename)
        {
            Console.WriteLine("\nLoading: " + filename + "\n");
            //Initialize();  //reset

            //load file
            byte[] loadedProgramBytes = null;
            try
            {
                loadedProgramBytes = File.ReadAllBytes(filename);
            }
            catch (Exception Ex)
            {
                Debug.WriteLine(Ex.ToString());
            }

            //verify file is not empty
            if (loadedProgramBytes == null)
            {
                Debug.WriteLine("Error loading program.  The byte array loaded is null.");
                return false;
            }

            int lSize = loadedProgramBytes.Count();

            for (int i = 0; i < lSize; ++i)
            {
                cpu.memory[i] = loadedProgramBytes[i]; // Store file into memory.
            }

            Debug.WriteLine("ROM loaded in successfully.\n");
            return true;
        }

        private void updateScreen(int addr, int val)
        {
            int x = addr >> 5;
            int y = 255 - ((addr & 0x1f) << 3);

            for (int bit = 1; bit <= 128; bit <<= 1)
            {
                //screenBuffer.SetPixel(x, y--, (bit & val) != 0 ? Color.White : Color.Black);
            }

            //Bitmap clone = (Bitmap)screenBuffer.Clone();
            //MainForm.pictureBox1.BackgroundImage = clone;
        }

    }
}

抛出的异常是

System.WhosebugException HResult=0x800703E9 Message=Exception of type 'System.WhosebugException' was thrown.

有人知道如何解决这个问题吗?我是这个网站的新手,所以不确定它是如何工作的,发布了很长的 class 文本等。我​​不想用代码让人们负担过重,但同时我明白如果没有足够的信息就很难提供帮助。如果有帮助,我在下面的程序中为每个 classes 添加了三个 Pastebin。

https://pastebin.com/gYhhQd5D << 主窗体 Class

https://pastebin.com/MhdGwanm << _8080 Class

https://pastebin.com/T9t6dNjL << CPU Class

谢谢。

CPU 构造函数正在调用 MainForm 构造函数,后者正在调用 CPU 构造函数,它是...

这很可能是由于构造函数调用的无限循环。

例如

class _8080 {
    private CPU cpu;
    private MainForm MainForm;

    public _8080 (CPU cpu, MainForm, mainForm) {
        this.cpu = cpu;
        this.MainForm = mainform;
    }
}

也将此应用到 CPU 和 MainForm class

删除:

    private _8080 _8080 = new _8080();
    private MainForm MainForm = new MainForm();

来自 CPU class(对于粘贴 bin 代码,您不会在那里使用它们)

在 8080 中,您的代码使用 cpu 和主窗体

在 Mainform 中,您的代码使用(注释)8080

因此,在 Mainform 中创建全局 cpu 并将其传递给其他构造函数

    private CPU cpu = new CPU(); //Remember you removed from cpu class the 2 lines with the new ....
    private _8080 _8080 = new _8080(this, cpu);
    
    public MainForm()
    {
        InitializeComponent();

    }

   [...]

而 8080 class 删除初始化并添加构造函数:

    private CPU cpu;
    private MainForm MainForm;

    public 8080( MainForm _MainForm, CPU _cpu)
    {
        cpu = _cpu;
        MainForm = _MainForm;
    }

// 请注意,为了尽量减少代码更改,我错误地使用了命名约定。伙计们,不要在家里这样做