我是c ++的新手,我正在尝试获得一个基本程序来初始化一个短无符号整数列表。我正在使用scygwin和g ++进行编译和运行。
以下是.cpp文件中的代码:
#include <iostream>
#include <fstream>
#include <sstream>
#include <string>
#include <typeinfo>
using namespace std;
int main (int argc, char* argv[]) {
list<int> events;
return 0;
}
我通过在cygwin终端输入以下命令来运行:
$ g++ -o test.out test.cpp
但是,我收到以下编译错误:
test.cpp:在函数'int main(int,char **)'中:test.cpp:16:1:错误: 'list'未在此范围列表事件中声明;
^ test.cpp:16:6:错误:在'int'之前预期的primary-expression 列出事件; ^
我很困惑为什么列表不在范围内,因为我使用的是命名空间std?我在c ++论坛上发现了一个类似的问题,但是我的问题会随之解决。有人知道这里有什么问题吗?
-Paul
答案 0 :(得分:4)
using namespace std;
不会为您的代码添加任何功能。这只是意味着您在引用std::
命名空间中的内容时不必键入std
,例如std::list
。
要将std::list
的代码库实际包含到您的程序中,您需要添加:
#include <list>
如果对这类事情有疑问,对cpp reference list
进行谷歌搜索会显示this这样的页面,您可以在其中看到:Defined in header <list>
位于顶部。
以下是关于using namespace std;
的{{3}}可能有用且another question。我将添加一些内容来解释名称空间。
在C ++程序中,将函数组织到类和命名空间中很常见。想象一下,您编写了自己的list
类来处理某些场景。为了防止命名冲突,您可以将其放在与std
不同的命名空间中。
namespace MyApp {
class list;
void sort(list&);
}
对于大多数大型代码库,您可能仍然希望使用std::list
,但有些事情需要MyApp::list
。使用命名空间,您可以对代码进行聚类,并防止类似功能的命名冲突。
<强>摘要强>
using namespace std;
使得如果您引用不在全局命名空间中的函数或类,它会在std
命名空间中查找它。
#include <list>
实际上在预处理器阶段插入源文件中的原型(有关如何访问代码的信息)。