我试图实现一个WebSocket服务器。我正在使用libwebsockets库。标题问题中的C/C++名称空间
ConnectionServer.c
文件有磁带库和main()函数(我没有看到的重要性在这里发表的任何内容。)此文件包括1个文件接收数据的回调称为设置代码: dmserver_callback.cpp
。 该文件包含另一个文件(我的自定义解析器文件),名为: data_parser.cpp
。 该文件包含一个名为definitions.h
(问题来源)的文件。
只是忍着我;我明白,包括文件(菊花链,可以这么说)可能不是最好的方式来做到这一点,我很可能应该使用头文件等。我有一个问题是,这是特别必要的吗?
为了澄清,一切工作正常,直到我尝试添加我自己的解析机制。
的definitions.h
文件如下:
namespace EngineDefinitions {
enum Version {
Major = 1,
Minor = 2
}; //Version;
namespace Server {
enum enum_Server {
MAX_PLAYERS = 200,
MAX_TABLES = 42, // 3 tables per row.
MAX_TABLE_PLAYERS = 10,
GAME_PORT = 2040, //2042
MAX_PARAMS = 10
}; //Server;
};
namespace Login {
enum enum_Login {
USERNAME = 1,
PASSWORD = 2
}; //Login;
};
};
我的错误是:
definitions.h(1): error C2061: syntax error : identifier 'EngineDefinitions'
我装在一个新的Win32控制台项目完全相同的头在Visual C++ 2010 Express和有它的工作原理。我看到的唯一区别是主文件(int main函数驻留)。 在该头文件中的作品被称为项目: ConectionServer.cpp
(C++)
和不工作被命名为主要的项目文件: ConnectionServer.c
(C)
这是否有东西做该文件正在编译C或C++?
我认为libwebsocket
库是用C编码的。 我不记得我是否以完全相同的方式创建了项目文件。
P.S.请让我知道是否有任何其他信息可以提供帮助。
编辑:我也意识到你不应该定义头文件内的类型(例如:枚举)。 我尝试使用extern enum
将源文件分成.cpp
和头文件,没有区别。事实上,当我尝试使用它们时,出现了比我讨价还价更多的错误(重新定义)。
你真的不应该包含'.cpp'文件。 – Marlon 2012-03-06 04:52:43
是的,我明白我不应该以这种方式包含文件。正如我所提到的,即使我使用适当的头文件,我仍然在第一个项目中得到这个错误,但不是第二个。 – 2012-03-06 04:57:01
您需要了解C++和C是不同的语言。将头文件包含在'.cpp'文件中时,编译器会尝试将'.h'编译为C++代码。 C++支持命名空间,所以每个人都很开心。但是当你尝试从'.c'文件中包含'.h'(这是实际发生的事情,如果你遵循'#include's),编译器试图将'.h'编译为C代码,但因C中不存在名称空间而失败。没有人开心。 – Marlon 2012-03-06 04:59:16