'list'未在此范围内声明

时间:2016-06-24 21:21:56

标签: c++ list namespaces

我是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

1 个答案:

答案 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>实际上在预处理器阶段插入源文件中的原型(有关如何访问代码的信息)。