代码错误导致的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 没有发现我的错误,可能是因为 Base
和 Derived
实际上都是模板,编译器也不是,首先抱怨的显然是 CL,它给出了这个 not-exactly-clear退出代码。
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 没有发现我的错误,可能是因为 Base
和 Derived
实际上都是模板,编译器也不是,首先抱怨的显然是 CL,它给出了这个 not-exactly-clear退出代码。