【发布时间】:2019-11-23 20:57:39
【问题描述】:
我正在使用 mongoose 在 C++ 中构建 HTTP 服务器,当我尝试在我的程序中包含其他文件时收到一条错误消息:
/Library/Developer/CommandLineTools/usr/include/c++/v1/cstdint:183:8: error:
expected unqualified-id
using::intptr_t;
^
/Users/cs/Downloads/mongoose-master/mongoose.c:2415:18: note:
expanded from
macro 'intptr_t'
#define intptr_t long
^
每当我尝试在我的程序中包含以下文件时都会发生这种情况:
#include <string>
#include <vector>
#include <cstring>
#include <iostream>
#include <iterator>
#include <sstream>
我试图通过注释掉其中一些文件来将其缩小到导致问题的文件之一,但似乎其中任何一个文件都会导致错误。有趣的是,string.h 不会导致错误。
【问题讨论】:
-
看起来 mongoose 库正在定义一个与标准库中的类型发生冲突的宏。你能举一个简单、完整的例子来显示你的包含顺序吗?一种解决方案可能是重新排序您的包含以将 mongoose.h 放在标准库文件之后,但在这种情况下,宏似乎是在 mongoose.c 中定义的,它应该不影响其他翻译单位。
-
@NicholasM 解决了!非常感谢!我认为这与宏冲突有关。
-
你在任何时候#include-ing mongoose.c 吗?通常不建议对 .c 或 .cpp 文件执行此操作。
-
是的,我将 .c 和 .h 文件都移到了其他包含语句之后,这使它起作用。包含 .c 文件不是一个好习惯吗?我觉得有必要的原因是它是一个 .c 文件而不是 .cpp,在 g++ 中编译它们感觉很奇怪,但它可以工作。
标签: c++ mongoose network-programming include unqualified-name