错误MSB6006:添加模板函数或类后,“CL.exe”退出代码1

时间:2015-11-04 18:40:40

标签: c++ templates crash msvc12 cl

在问题上提出这个问题是因为没有太多关于此错误代码的信息。解决这个问题相当简单,但是我花了很多时间来诊断,因为没有给出正确的错误信息。

那发生了什么?

  • 我在模板中添加了模板化功能
  • 现在,当项目编译时,会弹出一条消息,指出CL.exe有问题需要关闭
  • Visual Studio使用error MSB6006: "CL.exe" exited with code 1
  • 中止编译

问题是我的模板函数中的语法错误。谁能想到这一点。

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

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

// foo.h

template <typename T>
void foo();

...

#include "foo.cpp"



// foo.cpp

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

3 个答案:

答案 0 :(得分:2)

首先,您需要单独编译包含模板化函数的所有.cpp文件(在项目资源管理器中选择一个,右键单击并“编译”)。

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

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

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

希望我能提供帮助。

答案 1 :(得分:0)

对我来说,解决此问题的原因是我有两个Visual Studio实例正在运行,而其中一个实例处于调试会话的中间,但我尝试编译另一个实例。停止调试会话可以为我解决此错误。

答案 2 :(得分:0)

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

  1. 重新检查代码,构建成功。
  2. 在现有表单中添加了新标签,CL.exe退出,代码为1。
  3. 还原代码并添加更改,直到出现错误,然后清除构建输出目录后才发生错误。
  4. 完全还原的版本-CL.exe退出,出现代码1错误。
  5. 将VS更新到16.4.0,然后重新启动PC-项目构建正常。