'list'未在此范围内声明

'list' was not declared in this scope

本文关键字:范围内 声明 list      更新时间:2023-10-16

我是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:错误: 在此范围列表事件中没有声明"列表";
^ test.cpp:16:6:错误:" int"之前的预期初级表达 列表事件; ^

我对为什么列表不在范围中感到困惑,因为我正在使用名称空间std?我在C 论坛上发现了一个类似的问题,但是我的问题将解决。有人知道这里有什么问题吗?

-paul

using namespace std;不会在您的代码中添加任何功能。这只是意味着您在std名称空间中引用事物时不必键入std::,例如std::list

要将std::list的代码库实际包含到您的程序中,您需要添加:

#include <list>

当对这种事情有疑问时,对cpp reference list进行Google搜索会在此类似的页面上搜索:您可以在其中看到:Defined in header <list>在顶部。

这是关于using namespace std;的另一个问题,可能证明有用,以及为什么不应该使用它。我会添加一点以解释名称空间。

在C 程序中很常见将功能组织到类和名称空间中。想象一下,您写了自己的list课程来处理某些方案。为了防止命名冲突,您将其放在与std不同的名称空间中。

namespace MyApp {
    class list;
    void sort(list&);
}

对于大多数大型代码库,您可能仍然更喜欢使用std::list,但是您需要MyApp::list。使用名称空间,您可以群集代码并防止类似功能的命名冲突。

摘要

using namespace std;这样做,因此,如果您在全局名称空间中引用函数或类,则在std名称空间中寻找它。

#include <list>实际上在预处理器阶段中插入原型(有关如何访问代码的信息)。