gpt4 book ai didi

c++ - 枚举语法错误 :missing tag name and constant

转载 作者:行者123 更新时间:2023-11-30 03:18:20 26 4
gpt4 key购买 nike

我正在尝试编译一个在以下行中显示错误的应用程序

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
};
}
}

根据4条错误信息无法定位问题,求助,谢谢

最佳答案

详细阐述 Retired Ninja 的猜测(我同意):

宏可能是一种瘟疫,尤其是在 C++ 中,因为它们不考虑任何命名空间。

OP暴露的代码没有任何问题。所以,原因一定是在非暴露的某个地方。

假设某处定义了一个宏

#define ROUTE_STATE "free"

#define ROUTE_STATE 2

这会改变

enum ROUTE_STATE {

enum "free" {

enum 2 {

真是一团糟。

如何处理?

  1. 您可以在仅预处理模式下运行编译器。例如。 g++ 有一个选项 -E为此,其他 C++ 编译器也提供了这样的选项(但名称可能不同)。这提供了预处理后的源代码,并向作者揭示了这些东西。

  2. 标识符的命名约定(样式)有助于降低此类混淆的风险。因此,宏只能以大写字母命名,而其他任何标识符都不能。例如。我更喜欢

    • 混合大小写的类型和枚举值,首字母大写
    • 变量和函数混合大小写,首字母为非大写字母。

有多种样式指南,但其中大多数只涉及大写字母的宏,其余则不常见。 (这一定是有原因的。)

也许,值得一提的是,一些甚至广泛使用的 API(如 win32)并不符合这个简单但有值(value)的规则。 (有一次,这让我很头疼,直到我找到原因。)

关于c++ - 枚举语法错误 :missing tag name and constant,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54778332/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com