gpt4 book ai didi

c++ - 在 vs2010 中使用 iostream 时,出现错误 C2039 : 'exit' : is not a member of '` global namespace''

转载 作者:搜寻专家 更新时间:2023-10-31 01:51:16 25 4
gpt4 key购买 nike

这个问题困扰了我几个星期。我正在使用 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

上面写着:

SOLUTION FOUND:

I have researched this issue on the web and it seems like it is something that has been an issue for a lot of people. The solution to this is as simple as removing a comment.

I looked through the stdlib.h file, and found the the following line was commended out:

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

I took out the comment and recompiled it, and now it works.

I believe in some builds the stdlib.h file will automatically be compiled with that portion of the code commented out. simple uncomment and your code will work.

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

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

最佳答案

I looked through the stdlib.h file, and found the the following line was commended out:

它应该被注释掉。 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 发布了将更新编译器头文件的服务包和安全更新。但如果文件被更改,它不会这样做。这可能会给您带来一大堆彼此不再兼容的文件。

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

关于c++ - 在 vs2010 中使用 iostream 时,出现错误 C2039 : 'exit' : is not a member of '` global namespace'',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14014348/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com