错误MSB6006:“CL.exe”退出代码2

时间:2012-12-19 09:17:29

标签: c++ visual-studio-2010

我正在使用visual c ++编写,当我编译时会出现此错误:

C:\Program Files (x86)\MSBuild\Microsoft.Cpp\v4.0\Platforms\Win32\Microsoft.Cpp.Win32.Targets(147,5): error MSB6006: "CL.exe" terminato con il codice 2.

有谁知道为什么?

提前致谢!

9 个答案:

答案 0 :(得分:3)

发生这种情况的原因有两个:

1)我忘记在非空函数中添加return语句。

2)我试图使用未初始化的指针。

您可以检查您的代码,这可能会有所帮助。

答案 1 :(得分:1)

在Visual Studio 2019中使用C ++代码对我来说发生了此错误,因为我没有正确初始化for-loop

我做到了:

for (int m; m < bytewidths + 1; m++) {}

而不是

for (int m=0; m < bytewidths + 1; m++) {}

我认为解决此问题的方法是手动解决您最近的代码

答案 2 :(得分:1)

实际上,您可以看到正确的错误消息,而不是Microsoft的任意错误代码。但是由于错误列表总是在出现错误时被强制显示,因此并不是很明显。标签Error List旁边是另一个标签Output,该标签显示原始错误输出。自从我使用2019年以来,我不确定该选项卡是否在所有版本中都存在,但是在较旧的版本中可能总有类似的东西。也许使用了不同的名称,或者是一个完全独立的窗口,而不是与Error List组合在一起。

对于another answerer here,该确切选项卡将显示:error C4700: uninitialized local variable 'm' used

这将使他免于不得不挖掘所有代码的麻烦。 =]

如果您忘记了需要返回值的函数的返回值,则会看到:error C4716: 'foo': must return a value

答案 3 :(得分:1)

我收到此错误是因为我在保存文件名时拼写错误。* 顺便说一句,此保存是在插入一些for循环之后进行的,这使我陷入了疯狂的追逐中,因为那些也是导致此错误的原因。

萨比(Sahbi)的技巧来查看“输出”选项卡,而不仅仅是常规的“错误代码”选项卡对我来说非常有用! 我使用“查看”菜单查找并显示“输出”标签。它显示以下内容:

  

1> ------开始构建:项目:C867性能评估,配置:调试x64 ------   1> Security_Student.cpp   1> c1xx:严重错误C1083:无法打开源文件:'Security_Student.cpp':没有这样的文件或目录   1> C:\ Program Files(x86)\ Microsoft Visual Studio \ 2019 \ Community \ MSBuild \ Microsoft \ VC \ v160 \ Microsoft.CppCommon.targets(429,5):错误MSB6006:使用代码2退出了“ CL.exe” 。   1>完成的建筑项目“ C867 Performative Assessment.vcxproj”-失败。   ===========构建:0成功,1失败,0最新,跳过0 ==========

我已将文件另存为'Securtiy_Student.cpp'。*

我会发表评论并赞成,但我还没有代表。

*如果拼写正确的文件也没有被删除,这将不是问题,因为编译器将忽略拼写错误的文件并使用拼写正确的先前版本。但是,我在Visual Studio中也遇到了一个奇怪的错误,在尝试保存文件时,它偶尔会确定我的文件之一是新文件,并且必须“另存为...”。但是,当我接受该操作时,它就会说该文件已经存在,但是如果我尝试用保存替换它,它说你不能替换它,因为它正在被使用。因此,解决方案是将文件粘贴到文本文件中,拒绝将文件保存在Visual Studio解决方案中,删除解决方案文件,创建一个新文件,将文本粘贴到其中,然后再次保存到解决方案中。无论如何,我都会在其他地方发布此问题,但我想提供一种偷偷摸摸的方式来获取错误的文件名来解决此线程中的错误。

答案 4 :(得分:0)

我在v110(Visual Studio 2012) - 编译器中遇到此错误,其中包含以下代码,其中包含错误的基于for的循环。

class A
{
    int b;
};

int main(int argc, char* argv[])
{
    A inst;

    for (auto &i : inst)
    {

    }

    return 0;
}

PS:v140(Visual Studio 2015)显示正确的错误:

error C3312: no callable 'begin' function found for type 'A'
error C3312: no callable 'end' function found for type 'A'

答案 5 :(得分:0)

当我通过以下方法忘记return语句时,我遇到了相同的错误:

char SpiRAM::write_byte(int address, char data_byte)
{
    assert(address >= 0);
    assert(address < SRAM_SIZE);

    _sram[address] = data_byte;

    return data_byte;
}

答案 6 :(得分:0)

也可能是实际上已删除的标头或源文件,仍在您的项目中列出。只需检查这些文件。

我使用系统资源管理器删除了Header和Source文件。在重新加载项目之前,VS显然无法识别缺失的文件,并尝试对其进行编译。

重新加载项目对我有用。

答案 7 :(得分:0)

只是想添加另一种情况,这种情况在Visual C ++ 2019(16.1.4)中发生:

...

class Slider {
    constructor(elem, loop) {
        this.elem = elem;
        this.Loop = loop || new Loop(this.elem, this);
        this.Loop.routine();
    }
    updateImage() {
        console.log(
            'Cross Synchronous Test: Updated images',
            'Called the function from loop.js'
        );
    }
}

class Loop {
    constructor(elem, slider) {
        this.elem = elem;
        this.Slider = slider || new Slider(this.elem, this);
        this.Slider.updateImage();
    }
    routine() {
        console.log(
            'Cross Synchronous Test: references a group of actions',
            'Called the function from Slider.js'
        );
    }
}

Visual C ++将在输出char *s; for(int i = 0; i < n; ++i) { if(i == 4) // we know n is going to be >= 4 but Visual C++ doesn't s = getStringPointerFromSomewhere(); } puts(s); 中打印一条消息,但是会崩溃,而不是将其报告为正常的错误或警告(可以说这应该是警告,因为它是完全合法的C代码)。

此问题的解决方案是在声明后将s赋给NULL:

potentially uninitialized local pointer variable 's' used

(所以...我猜是在声明时使用初始化指针和其他变量的大概好习惯。)

答案 8 :(得分:-3)

您应该检查您的源文件;编译器可能无法找到源文件,可能是您键入了错误的名称。例如,写#include <isotream>而不是#include <iostream>会导致问题。