在vs2010中使用iostream时,出现错误C2039:'exit':不是"全局命名空间"的成员

When using iostream in vs2010, I get error C2039: 'exit' : is not a member of '`global namespace''

本文关键字:成员 命名空间 exit 不是 全局 C2039 vs2010 iostream 错误      更新时间:2023-10-16

这个问题一直困扰着我数周。我正在使用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 引物的简单程序。编译时,我会收到以下错误信息:

1> e: program Files Microsoft Visual Studio 10.0 VC Include cstdlib(24):错误C2039:'exit':不是'global namespace''

的成员

1> e: program Files Microsoft Visual Studio 10.0 VC include cstdlib(24):错误c2873:'exit':'exit':符号无法在使用declaration

中使用

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

http://social.msdn.microsoft.com/forums/nl-nl/vsexpressvc/thread/31385f37-94b8-4297-b054-b054-7fdbc5bc5bc5b1f51e

说:

找到解决方案:

我已经在网络上研究了这个问题,似乎这对很多人来说都是一个问题。解决方案就像删除评论一样简单。

我浏览了stdlib.h文件,发现以下行被赞扬:

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

我发表了评论并重新编译了它,现在它起作用了。

我相信,在某些构建中,stdlib.h文件将自动编译,其中该部分已注释。简单的摘要和您的代码将起作用。

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

任何人都知道如何解决此问题?

我浏览了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发布了将更新编译器标题文件的服务包和安全更新。但是,如果更改文件,则不会这样做。这可能会让您遇到不再彼此兼容的讨厌的混合文件。

您需要修复对这些文件的损害。请注意这些文件的修改时间戳,以找出可能已更改的文件。并从已知的朋友或同事中复制那些。另一种可能的方法(我自己从未尝试过)是将更改的文件移动到其他地方并再次设置,要求维修。实际上不确定是否有效,应该。当您这样做时,还会重新应用服务包。