错误 C3861:“系统”:未找到标识符

Posted

技术标签:

【中文标题】错误 C3861:“系统”:未找到标识符【英文标题】:error C3861: 'system': identifier not found 【发布时间】:2013-07-07 10:45:21 【问题描述】:

我刚刚在 VS 2010 中启动了一个新的 win32 控制台应用程序,并在即将到来的向导中将 Additional options 属性设置为 precompiled header

基于one of my previous questions,我决定使用以下主要原型:

int main(int argc,  char* argv[])

我还将项目的Character Set属性更改为Use Multi-Byte Character Set

但是,下面的代码:

system("pause");

会产生这两个错误:

error C3861: 'system': identifier not found  
IntelliSense: identifier "system" is undefined

我之前也有同样的经历,没有错误! 谁能建议我怎么了?

【问题讨论】:

您是否包含了 @billz 在代码顶部添加代码 #include "stdlib.h" 将省略其中一个错误,但错误 error C3861: 'system': identifier not found 保持不变。当然,主要问题是:在我从星期五开始制作的以前的项目中(我可以把他们的代码放在这里),我有相同的设置,他们没有错误!!!!!!!!!!!!!!! !!!!!!!!!!!! 在 C++ 中,您应该使用 #include <cstdlib>std::system @Mats Petersson 在使用 Cody Gray 建议的方式之前,我尝试在代码顶部使用 using namespace std。我觉得和写std::system一样,但是遇到错误IntelliSense: name must be a namespace name你知道为什么吗?我研究过documentation这个代码应该没有问题吧? 今后对前面评论中描述的问题的任何帮助将不胜感激。为什么写using namespace std 会出现这样的错误?就算用#include <stdlib.h>再写using namespace std问题也解决不了?!!!请注意,尽管@Mats Petersson 说了什么,但我们不能使用#include <cstdlib.h>,但我们可以使用#include <stdlib.h>,这只会解决问题。不需要命名空间 std ,这甚至会使问题更加复杂。请帮我解释为什么? 【参考方案1】:

在 C++ 中,您必须包含包含函数声明的适当头文件才能使用它,否则您将收到关于找不到标识符的编译器错误。

system函数为例,在stdlib.h头文件中定义。

因此,在代码文件的顶部(或在预编译的头文件中)添加以下行

#include <stdlib.h>

(您使用尖括号而不是引号,因为stdlib.h 是在构建工具之前被告知的位置中找到的标头;这包括系统标头目录和您的构建配置特别需要的其他目录。)

除此之外,我强烈建议反对使用多字节字符集(所有新的 Windows 应用程序都应支持 Unicode)或 system 函数,尤其是 system("pause").

【讨论】:

不使用尖括号,因为它是系统头文件,之所以使用尖括号,是因为头文件位于预处理器被告知要在其中搜索头文件的目录之一。系统头文件路径预先知道,并且构建选项(/I 用于 MSVC?-I 用于大多数其他工具)通知工具在使用尖括号时要搜索的其他路径。 @mah 这就是“系统标头”的意思。这是您的构建系统已知的标头。 是的,但是还有其他(非系统标头)位置可以使用尖括号,而您的陈述另有说明。例如,假设我有随机的第 3 方库 myLib 用于我的项目。我会合理地包含-I /usr/home/myname/myLib(或/I 等)以启用#include &lt;myLib.h&gt; 从那里拾取,但这不是系统头文件。 @mah 这对你来说是不是一个私人肥皂盒?我不认为我说的不清楚。在您的示例中,您将该目录添加到构建系统搜索系统标头的位置。尖括号和引号之间的实际区别在于后者优先考虑当前工作目录中的标题。但事实是,根据 C 和 C++ 标准,所有都是依赖于实现的,因此您需要检查文档以确定。我无法想象这与甚至不知道什么是标题以及如何使用它们的人有什么关系。 @Cody Gray 感谢您的指导。问题已解决,但你能建议我 1-为什么我以前的项目中没有这样的问题,但设置相同且不包括 ? 2- 为什么建议我不要使用 `system("pause") 3- 我认为所有新的 Windows 应用程序最支持 unicode 但here David Heffernan 有另一个想法!!【参考方案2】:

对我有用的是确保#include "stdafx.h" 是文件中的第一个包含。因此,#include &lt;iostream&gt; 将在此之后。

这样做解决了问题。

【讨论】:

以上是关于错误 C3861:“系统”:未找到标识符的主要内容,如果未能解决你的问题,请参考以下文章

错误 C3861:“_beginthreadex”:未找到标识符

C++ Visual Studio 2012 错误 C3861:'_T':找不到标识符?

错误 C3861:“execute_assert”:找不到标识符

VC ++ WINAPI窗体:找不到标识符(C3861错误)

error C3861: “getpid”: 找不到标识符

错误 C2039:“查找”:不是“标准”的成员