枚举声明和定义

时间:2013-04-01 14:58:05

标签: c++ eclipse optimization enums arduino

我想这样做:

static const enum GSENSITIVITY {G1=0,G15=1,G2,G3,G4,G8,G16}gSense;

如果我在.h文件中键入此内容,一切都近乎完美,但我无法创建一个返回GSENSITIVITY类型的方法。它无法识别它。此外,我不能在.cpp上做任何gSense的定义。至少我使用的语法不起作用。哪种语法正确?

我也不能只输入:

static const enum GSENSITIVITY {G1=0,G15=1,G2,G3,G4,G8,G16};

我收到此错误:

  

错误:只能为对象和函数指定存储类

3 个答案:

答案 0 :(得分:1)

在第一个示例中,您无法在任何源文件中定义gSense,因为它已在头文件中定义。

此外,第二个示例不起作用,因为您没有定义变量,而staticconst在定义enum时没有任何意义。

答案 1 :(得分:0)

代码示例混合了两种不同的概念。有时这没关系,但它可能会让人感到困惑。

定义枚举类型:

enum GSENSITIVITY { G1, G15, G2, G3, G4, G8, G16 };

G1的值为0,每个后续枚举器获取下一个值。也就是说,不需要问题中的显式值。

这就是从函数返回枚举类型值所需的全部内容:

GSENSITIVITY f() { return G1; }

如果要创建枚举类型的对象,就像创建任何其他类型的对象一样:cv-qualifiers,type name,object name:

const GSENSITIVITY gSense; // value is 0, i.e., G1

或添加可选的初始化程序:

const GSENSITIVITY gSense = G3;

您不需要使用static标记常量;这是const暗示的。

答案 2 :(得分:0)

如果没有更多的背景,就无法分辨出你想要做什么。

static const enum GSENSITIVITY {G1=0,G15=1,G2,G3,G4,G8,G16}gSense;

如果那应该是一个类成员,那就没关系 - 它定义了类型GSENSITIVITY,并且还声明了变量gSense。您还需要在源文件中定义和初始化变量,以便只有一个定义:

const my_class::GSENSITIVITY gSense = something;

如果它不是类成员,则会声明类型,但也会定义变量并声明它。由于它是const,因此定义也必须用值初始化它。

在任何一种情况下,声明返回GSENSITIVITY的函数应该没有问题;如果您遇到问题,则需要发布代码和错误消息。

static const enum GSENSITIVITY {G1=0,G15=1,G2,G3,G4,G8,G16};

它定义了一个类型,并且正如错误消息所示,staticconst无法为类型定义指定。