我正在尝试编译在下一行中显示错误的应用程序
enum ROUTE_STATE
{
ROUTE_STATE_DOWN = 0,
ROUTE_STATE_UP = 1,
ROUTE_STATE_STANDBY = 2,
ROUTE_STATE_DISABLED= 4
};
分别有四个错误消息
enum ": missing tag name
Syntax error: "constant
Syntax error: missing ";" (before "{")
"{" : missing function title (is it an older form table?)
在以下代码中
namespace ECON
{
namespace FDC
{
enum ROUTE_TYPE
{
ROUTE_TYPE_RX = 0,
ROUTE_TYPE_TX = 1
};
enum ROUTE_STATE
{
ROUTE_STATE_DOWN = 0,
ROUTE_STATE_UP = 1,
ROUTE_STATE_STANDBY = 2,
ROUTE_STATE_FREE = 3,
ROUTE_STATE_DISABLED = 4
};
}
}
根据四个错误消息无法找到问题,谢谢帮助
答案 0 :(得分:2)
阐述“退休忍者”(我同意)的猜测:
宏可能会带来麻烦,尤其是在C ++中,因为它们不考虑任何名称空间。
OP的公开代码没有错。因此,原因一定是在未曝光的地方。
想象一下,在某个地方定义了一个宏
<p-accordion>
<p-accordionTab>
<p-header>
<span>Some card title</span>
<p-button title="Delete" (onClick)="$event.stopPropagation(); deleteCard()"></p-button>
</p-header>
</p-accordionTab>
</p-
或
#define ROUTE_STATE "free"
这会改变
#define ROUTE_STATE 2
到
enum ROUTE_STATE {
或
enum "free" {
真是一团糟。
如何处理?
您可以在仅预处理模式下运行编译器。例如。 enum 2 {
为此有一个选项-E
,其他C ++编译器也提供了这样的选项(但名称可能不同)。这将提供经过预处理的源代码,并向作者揭示这些内容。
有一些用于命名标识符的约定(样式),有助于降低此类混淆的风险。 因此,宏应仅使用大写字母命名,而其他任何标识符均不能使用大写字母。例如。我更喜欢
有多种样式指南,但大多数仅涉及大写的宏,而其余大多数则不常见。 (一定有原因。)
也许是值得一提的是,某些甚至广泛使用的API(例如win32)也不符合这个简单但有价值的规则。 (有一次,这使我头痛不已,直到找到原因为止。)