错误 C3861: 'system': 找不到标识符

3

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

基于我以前的问题之一,我决定使用以下主要原型:

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

我还将项目的“字符集”属性更改为“使用多字节字符集”。但是,下面的代码:
system("pause");

将产生这两个错误:


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

我之前也有同样的经历,但是并没有出现错误!
有人能够建议我出了什么问题吗?


你是否包含了 <stdlib.h> 头文件? - billz
@billz 在代码顶部添加#include "stdlib.h"可以消除一个错误,但error C3861: 'system': identifier not found错误仍然存在。当然,主要问题是:在上周五之前的项目中(我可以在此处放置它们的代码),我使用了相同的设置,没有任何错误! - Sepideh Abadpour
如果你在C++中使用"stdlib.h",可能会遇到问题,因为它不能保证是C++安全的。你应该使用"cstdlib",它保证将namespace stdextern "C"放在代码周围。实际上,两者都可能有效(因为很多古老的代码在代码中使用了<stdlib.h>,破坏这些代码将是不好的)。当然,如果<stdlib.h>没有将函数放置在namespace std中,那么你会从智能感知中得到那种类型的消息。 - Mats Petersson
@Mats Petersson 实际上问题出现在我写 #include <cstdlib.h> 时遇到了错误 IntelliSense: cannot open source file "cstdlib.h",我认为这是因为它没有被添加为“Additional Dependencies”的预编译头文件所导致的。 - Sepideh Abadpour
@sepideh,使用 cstdlib,而不是 cstdlib.h - chris
显示剩余3条评论
2个回答

7
在C++中,如果要使用函数,必须包含相应的头文件以声明该函数,否则会出现编译器错误,指示找不到标识符。
对于"system"函数,它在"stdlib.h"头文件中定义。
因此,在代码文件的顶部(或预编译头文件中),添加以下行:
#include <stdlib.h>

您使用尖括号而不是引号,因为 stdlib.h 是一个头文件,位于构建工具先前告知的位置;这包括系统头文件目录和构建配置明确调用的其他目录。
除此之外,我强烈建议不要使用多字节字符集(所有新的Windows应用程序都应支持Unicode)或system函数,特别是system("pause")

2
不使用尖括号是因为它是一个系统头文件,而是因为头文件位于预处理器已被告知在其中搜索头文件的目录之一中。系统头路径是预先知道的,并且构建选项(/I用于MSVC?-I用于大多数其他工具)在使用尖括号时通知工具搜索附加路径。 - mah
@mah 这就是所谓的“系统头文件”的意思。它是一个已知于你的构建系统的头文件。 - Cody Gray
1
@mah 这是你的个人宣传栏吗?我认为我的话并不含糊。在你的例子中,你将该目录添加到构建系统搜索系统头文件的位置之一。尖括号和引号之间的实际区别在于后者优先考虑当前工作目录中的头文件。但事实上,根据 C 和 C++ 标准,所有这些都取决于具体实现,因此您需要查阅文档以确保正确。我无法想象这对于连头文件是什么以及如何使用它们都不知道的人有何意义。 - Cody Gray
@mah,我并不是想要无礼。我仍然认为这个陈述既不是不完整也不是不准确的。正如我所说,这些都是你的构建系统已知的头文件。这个陈述有什么不完整或不准确的地方呢?你的例子只证明了你可以告诉你的构建系统额外的头文件。我并不否认这一点。 - Cody Gray
@mah 可能吧。我建议向微软和GCC团队提交错误报告。他们的文档同样滥用“系统头文件”符号。如果您认为您可以更好地表达它,那么您可以编辑我的答案。至于为什么我要包含它,那是为了帮助消除不可避免的混淆:“为什么有时我会看到使用引号而不是尖括号的#include语句?” - Cody Gray
显示剩余9条评论

3
我的解决方法是确保文件中的#include "stdafx.h"排在第一位,这样#include <iostream>就会在其后面。这样做可以解决问题。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接