17

我正在用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.

有谁知道为什么?

提前致谢!

4

9 回答 9

13

您实际上可以看到正确的错误消息,而不是 Microsoft 的任意错误代码。但是由于错误列表总是在有错误时强制可见,所以不是很明显。该选项卡旁边Error List是另一个选项卡Output,它显示原始错误输出。自从我使用 2019 以来,我不确定该选项卡是否存在于所有版本中,但无论如何,旧版本中可能存在非常相似的东西。也许名称不同,或者是一个完全独立的窗口,而不是与Error List.

对于此处的另一个回答者,该确切选项卡将显示:error C4700: uninitialized local variable 'm' used

这将使他不必深入研究他的所有代码。=]

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

于 2019-07-17T18:29:19.270 回答
9

这发生在我身上有多种不同的原因:

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

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

3) 我写了一个循环,比如 for(int i=i;...) 而不是 for(int i=0;...)

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

于 2019-07-04T18:56:57.410 回答
7

当我在以下方法中忘记了 return 语句时,我得到了同样的错误:

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

    _sram[address] = data_byte;

    return data_byte;
}
于 2019-05-30T14:23:38.950 回答
1

这个错误发生在我使用 Visual Studio 2019 的 C++ 代码时,因为我没有 for-loop正确初始化我的。

我做了:

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

而不是

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

我认为解决这个问题的方法是手动解决你最近的代码

于 2019-06-30T23:16:19.350 回答
1

我在 v110 (Visual Studio 2012)-Compiler 中使用以下代码得到了这个错误,其中包含错误的基于 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'
于 2017-03-21T09:15:11.050 回答
1

我收到这个错误是因为我在保存文件名时拼错了文件名。*顺便说一下,这个保存是在插入了几个 for 循环之后,这让我大吃一惊,因为这些也可能是这个错误的根源。

Sahbi 查看输出选项卡而不是一般错误代码选项卡的提示对我非常有用!我使用 View 菜单来查找并显示 Output 选项卡。它读到以下内容:

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): error MSB6006: "CL. exe”以代码 2 退出。 1> 完成构建项目“C867 Performative Assessment.vcxproj”——失败。========== 构建:0 成功,1 失败,0 最新,0 跳过 ==========

我已将文件保存为“Securtiy_Student.cpp”。*

我会发表评论和投票,但我还没有代表。

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

于 2019-09-29T02:34:51.773 回答
1

也可能是实际删除的头文件或源文件,仍列在您的项目中。只需检查此类文件。

我使用系统资源管理器删除了一个 Header 和 Source 文件。VS 显然无法识别已删除文件的缺失并尝试编译它们,直到您重新加载项目。

重新加载项目对我有用。

于 2019-08-08T16:14:50.573 回答
0

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

...

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); 

Visual C++ 将在 Output: 中打印一条消息potentially uninitialized local pointer variable 's' used,但会崩溃而不是将其报告为正常错误或警告(可以说这应该是警告,因为它是完全合法的 C 代码)。

这个解决方案是在声明后将 s 分配给 NULL :

char *s = NULL;

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

于 2019-08-09T22:59:59.760 回答
-4

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

于 2016-04-29T06:27:16.663 回答