代码错误导致的MSB6006错误"CL.exe exited with code -1073741819"

MSB6006 error "CL.exe exited with code -1073741819" caused by errors in code

TLDR:IDE 和编译器都在代码中遗漏了一个错误,它只是由此退出代码报告的。

在对有关虚拟方法的代码进行了小幅修改后,我似乎莫名其妙地收到了上述错误。将退出代码转换为十六进制会得到 0xc0000005,即访问冲突。正在解决相同的问题 here and here。根据这些讨论,这可能是由于 cl.exe 由于某种原因无法访问造成的,但这些原因不适用于我的情况(我检查过)。

在某处提到的另一个原因(我丢失了 link)是 project-specific 设置中的错误。我的其他项目编译没有问题,所以我试图修复它。即使我创建了一个新的(此项目的副本),它也能正常工作。然而,当我将所有 headers 和源代码移动到这个新项目时,它又开始做这件事了。

我试着回到错误突然开始出现的地方,我找到了。我不确定是怎么回事,但这个错误是由我编写的一段错误代码引起的。

我的一个 headers 包含两个 classes,其中一个(基础)原样是 stand-alone,但另一个(派生的)也为它。两者都有相同的方法(相同的名称和参数列表),这可能不是最好的方法,但似乎编译没有问题。

class Base {
    void DoStuff(void*);
    void SetValue(bool);
}

class Derived : private Base {
    void* m_ptr;
    void DoStuff() { Base::DoStuff(m_ptr); }
    void SetValue(bool b) { Base::SetValue(b); }
}

注意,我这样做是因为DoStuff的参数不同,否则我就公开继承了。

然后我决定添加一个 interface-like(摘要)class 为了方便,错误开始出现。

struct Iface {
    virtual void SetValue(bool) = 0;
}

class Base : public Iface {
    void DoStuff(void*);
    void SetValue(bool) final;
}

class Derived : private Base {
    void* m_ptr;
    void DoStuff() { Base::DoStuff(m_ptr); }
    void SetValue(bool b) { Base::SetValue(b); }
}

你看到我在这里犯的明显错误了吗?

去掉final后,代码重新编译。 IDE 没有发现我的错误,可能是因为 BaseDerived 实际上都是模板,编译器也不是,首先抱怨的显然是 CL,它给出了这个 not-exactly-clear退出代码。