错误的 STL 标头

Posted

技术标签:

【中文标题】错误的 STL 标头【英文标题】:Bad STL Headers 【发布时间】:2011-12-04 05:51:02 【问题描述】:

我想做一些 STL 集,但是当我这样做时告诉我

error C2143: syntax error : missing ';' before '<'
error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
error C2238: unexpected token(s) preceding ';'

意思是我没有包含正确的标题定义 (#define &lt;set&gt;) 但我有。套装是否位于不同的位置?源码是这样的

set<int> playerlist;

头文件是...

#include <iostream>

//#include "winsock2.h"
#include "Ws2tcpip.h"
#include <list>

//#include <windows.h>
#include <process.h>
#include <stdio.h>
#include <string>
#include <fstream>
#include <map>

#pragma comment(lib, "ws2_32.lib")

using namespace std;

#include <set>

【问题讨论】:

你做了using namespace std;吗?您需要从命名空间中指定它。 std::set&lt;int&gt;也可以。 ¤ 确保您#include &lt;set&gt;。请注意,预处理器指令是 #include,而不是 #define。然后要么编写合格的std::set 而不是普通的set,或者使用using namespace stdusing std::set 指令。干杯&hth, 我正在使用 std,我尝试了 std::set mylist 您能告诉我们您的项目包含的所有 STL 标头以及顺序吗? 是的,指令是#include 【参考方案1】:

你需要的是

#include <set>

而不是

#define <set>

在使用 set 之前,在你的 main 函数之前写下下面一行

using namespace std;

【讨论】:

【参考方案2】:

#define <set>

我希望你的意思

#include <set>

?

您还需要以某种方式表明您想要来自std 命名空间的set。您可以通过在您引用它的任何地方为 set 加上 std:: 前缀来做到这一点:

set<int> playerlist;

或者通过使用using 声明告诉编译器,每当您引用set 时,您的意思是std::set

using std::set;

(也可以编写一个包罗万象的using namespace std; 声明,表示您总是想使用std 命名空间中的所有内容,但这通常被认为是不好的做法。我之所以提到它只是因为,尽管这是不好的做法,这是相当普遍的,所以你很可能会遇到这样做的代码。)

【讨论】:

以上是关于错误的 STL 标头的主要内容,如果未能解决你的问题,请参考以下文章

为啥我不需要在 gcc 4.6 中包含 STL 标头?

为啥 gcov 为 STL 标头创建代码覆盖率数据?

Eclipse CDT:未解决包含 stl 标头

为啥我不断收到“错误 [ERR_HTTP_HEADERS_SENT]:将标头发送到客户端后无法设置标头”错误?

如何修复来自 Apollo 客户端的格式错误的身份验证标头错误

错误:在我初始化会话后发送标头后无法设置标头