【发布时间】:2011-08-10 20:41:49
【问题描述】:
我有一个 c++ 文件,它不断抛出关于链上四个文件的错误,而使用该 #include 的所有其他文件都可以正常编译。
它一直给我这种东西。我确定包含文件没有问题 1. 使用相同文件的所有其他文件都可以正常编译 2. 我查看了该文件,它很好。
/usr/include/opal/opal/mediafmt.h:305:9: error: expected identifier before numeric constant
/usr/include/opal/opal/mediafmt.h:305:9: error: expected ‘}’ before numeric constant
/usr/include/opal/opal/mediafmt.h:305:9: error: expected unqualified-id before numeric constant
/usr/include/opal/opal/mediafmt.h:308:14: error: bit-field ‘mode’ with non-integral type
这很奇怪,因为它在链上抛出了大约 5 个文件的错误:
In file included from /usr/include/opal/opal/connection.h:44:0,
from /usr/include/opal/opal/call.h:41,
from /usr/include/opal/opal/manager.h:42,
from /usr/include/opal/opal/endpoint.h:41,
from /usr/include/opal/opal/localep.h:41,
from /home/jonathan/workspace/HHPVideoServer/opal/GstEndPoint.h:12,
from /home/jonathan/workspace/HHPVideoServer/opal/opal-call-manager.h:42,
from ../gui/HHPVideoCodecGui.cc:3:
我检查以确保我没有搞砸任何 #define ,但这是我唯一的想法。有人可以向我提供如何跟踪此错误的好方法吗?
这是文件:
http://www.opalvoip.org/docs/opal-v3_9/da/d60/mediafmt_8h-source.html
更新
这是带有来自预处理器的麻烦行的结构。我想“0L”是个问题。
struct H245GenericInfo {
H245GenericInfo() { memset(this, 0, sizeof(*this)); }
unsigned ordinal:16;
enum Modes {
0L,
Collapsing,
NonCollapsing
} mode:3;
enum IntegerTypes {
UnsignedInt,
Unsigned32,
BooleanArray
} integerType:3;
bool excludeTCS:1;
bool excludeOLC:1;
bool excludeReqMode:1;
};
然后
#define None 0L
from "/usr/include/X11/X.h" 导致 0L 在第 305 行的 Modes 枚举中替换为 None。
来自 X11 库。其他文件正在编译的原因是它们也没有使用 Gtk。有没有人有一个不涉及我重写任何一个 lib 文件的解决方法?
解决方案
我只是把有问题的#include 放在其他一切之上。感谢大家的帮助。
【问题讨论】:
-
我知道你说文件没问题,但请用它的内容来幽默我们。
-
在其中一个文件中查找缺少的分号。
-
对丢失的分号很好的猜测。或者可能缺少右括号。
-
当然,它确实很长。
-
第 305 行位于枚举定义的中间。