错误 MSB6006:"CL.exe" 在添加模板函数或 class 后以代码 1 退出

error MSB6006: "CL.exe" exited with code 1 after adding template function or class

抢先问这个问题,因为关于这个错误代码的信息不多。解决起来很简单,但由于没有给出正确的错误信息,我花了很多时间来诊断。

所以发生了什么事?

问题是我的模板函数中存在语法错误。谁能猜到。

然而,很难找到,因为这些都没有被报道。请参阅我的回答,了解如何确定哪些功能有缺陷。

模板函数位于 header 中包含的 .cpp 中,但是,在 header 中完全定义它们没有任何区别。

// foo.h

template <typename T>
void foo();

...

#include "foo.cpp"



// foo.cpp

template <typename T>
void foo() 
{
...
}

首先,您需要单独编译所有包含模板函数的 .cpp 文件(select 在项目资源管理器中,右键单击并 "compile")。

对我来说,第一个提示是其中一些已编译,而另一些 cl.exe 崩溃了。

下一步是创建一个只有一个函数的 bogus.cpp 文件,我在其中一个一个地添加了对我创建的每个模板化函数的调用。添加一个后:重新编译。一切顺利,直到我找到有缺陷的那个,现在 bogus.cpp 也崩溃了 cl.exe。大奖。

最后的工作是修复语法错误,如果没有错误消息,这很烦人,但是一旦完成,bogus.cpp 将再次编译。 Return 在那里添加更多的函数调用,直到你涵盖所有内容。

希望能帮到你。

为我解决的问题是我有两个 Visual Studio 运行 的实例,其中一个在调试会话期间,我尝试编译另一个实例。停止调试会话为我修复了这个错误。

简单表单和VS2019遇到同样的问题。这似乎不一定与代码问题有关,但可能与 VS 本身有关。

  1. 重新签出代码,构建正常。
  2. 向现有表单添加了新选项卡,CL.exe退出并出现代码 1 错误。
  3. 还原代码并添加更改,直到出现错误,然后无法清除错误,清除构建输出目录后的事件。
  4. 完全还原构建 - CL.exe 退出并出现代码 1 错误。
  5. 已将 VS 更新到 16.4.0 并重新启动 PC - 项目构建正常。