【问题标题】:When using iostream in vs2010, I get error C2039: 'exit' : is not a member of '`global namespace''在 vs2010 中使用 iostream 时,出现错误 C2039: 'exit' : is not a member of '`global namespace''
【发布时间】:2012-12-10 11:06:23
【问题描述】:

这个问题已经困扰我好几个星期了。我正在使用 MS vs2010。

#include <iostream>
int main()
{
    std::cout << "Enter two numbers:" << std::endl;
    int v1 = 0, v2 = 0;
    std::cin >> v1 >> v2;
    std::cout << "The sum of " << v1 << " and " << v2
    << " is " << v1 + v2 << std::endl;
    return 0;
}

一个来自 C++ Primer 的简单程序。当我编译它时,我得到以下错误信息:

1>e:\program files\microsoft visual studio 10.0\vc\include\cstdlib(24): error C2039: 'exit' : is not a member of '`global namespace''

1>e:\program files\microsoft visual studio 10.0\vc\include\cstdlib(24): error C2873: 'exit' : symbol cannot be used in a using-declaration

我试图找到一些解决方案,我得到了这个:

http://social.msdn.microsoft.com/Forums/nl-NL/Vsexpressvc/thread/31385f37-94b8-4297-b054-7fdbc5b1f51e

上面写着:

找到的解决方案:

我在网上研究过这个问题,似乎很多人都关心这个问题。解决这个问题就像删除评论一样简单。

我查看了stdlib.h文件,发现下面一行被推荐出来了:

_CRTIMP __declspec(noreturn) void __cdecl exit(__in int _Code);

我把评论拿出来重新编译,现在可以了。

我相信在某些构建中,stdlib.h 文件会自动编译,并注释掉那部分代码。简单的取消注释,你的代码就可以工作了。

显然有些人用这个解决方案解决了这个问题。但是,我什至在我的 stdlib.h 中找不到_CRTIMP __declspec(noreturn) void __cdecl exit(__in int _Code);

有人知道如何解决这个问题吗?

【问题讨论】:

  • 请将您的答案放在一个答案中并自己接受。这样,该网站就可以运行;-)
  • @rubenvb 我不确定你的建议是什么,但我还没有解决方案。我在问题中发布的所谓“解决方案”对某些人有用,但对我不起作用。这就是我在这里问的原因。
  • 嗯,你确实喊了SOLUTION FOUND...但我懒得再读下去了。
  • @rubenvb 好吧,那是我的错。我应该说得更清楚。刚刚有人帮我编辑过,现在应该可以了。
  • 谢谢@Bo Persson,我的问题在您编辑后更有条理。

标签: c++ visual-studio-2010 iostream


【解决方案1】:

我查看了stdlib.h文件,发现下面一行被推荐出来了:

它应该被注释掉。 stdlib.h 的那部分应该如下所示:

#ifndef _CRT_TERMINATE_DEFINED
#define _CRT_TERMINATE_DEFINED
_CRTIMP __declspec(noreturn) void __cdecl exit(_In_ int _Code);
_CRTIMP __declspec(noreturn) void __cdecl _exit(_In_ int _Code);
_CRTIMP __declspec(noreturn) void __cdecl abort(void);
#endif

不清楚如何在您的文件版本中对其进行注释。但很明显,您会毫不犹豫地编辑编译器头文件以解决问题。您可能以前这样做是为了绕过一个问题但不记得它。

总的来说,这是一个非常糟糕的主意。 Microsoft 发布将更新编译器头文件的服务包和安全更新。但如果文件被更改,它将不会这样做。这可能会给您留下一堆彼此不再兼容的令人讨厌的混合文件。

您需要修复对这些文件造成的损坏。注意这些文件的修改时间戳以找出可能已更改的文件。并从朋友或同事的已知良好机器中复制这些内容。另一种可能的方法(我自己从未尝试过)是将更改的文件移动到其他地方并再次运行安装程序,要求修复。实际上不确定这是否有效,它应该。当您这样做时,还要重新应用服务包。

【讨论】:

  • 嗯,我刚重装了vs2010,就没有这个问题了。我实际上并没有编辑头文件,我只是按照他检查头文件的解决方案。我不知道为什么我有一个奇怪的 stdlib.h,但我曾经安装了 vc2010 express 和 vs2010,我想这可能是原因。无论如何,谢谢你的回答。
  • 不,这不是原因。又一次失去了真正诊断这个常见问题的机会。从来没有看过时间戳,是吗?所以这很可能会再次发生。
  • 不,我没有看时间戳,因为我真的没有修改任何头文件。几周前我安装了vs2010,从那以后我一直遇到这个问题。我在谷歌搜索它,发现很多人也有这个问题。正如你所说,这是一个普遍的问题。我找到的唯一解决方案是我在我的问题中发布的那个,它不起作用。那么,除了重新安装我的编译器,我应该怎么做?
猜你喜欢
  • 2014-07-17
  • 1970-01-01
  • 1970-01-01
  • 2015-01-14
  • 1970-01-01
  • 2011-03-08
  • 1970-01-01
  • 2018-03-15
  • 2020-09-18
相关资源
最近更新 更多