这里可以使用枚举作为数据结构吗?错误:“重新定义枚举器”[已关闭]

问题描述 投票:0回答:3

我正在尝试使用 IMU 的增益和偏移来计算温度,这就是我想要检索增益和偏移值的方式,以便我知道我从正确类型的 IMU 中获得了正确的值:

float gain = IMU_TEMPERATURE_CHARACTERISTICS::GAIN::type1;
float offset = IMU_TEMPERATURE_CHARACTERISTICS::ZERO_ADC_OFFSET::type1;

所以我创建了这个数据结构

struct IMU_TEMPERATURE_CHARACTERISTICS
{
    enum GAIN
    {
        type1 = 4,
        type2 = 256
    };

    enum ZERO_ADC_OFFSET
    {
        type1 = 15,
        type2 = 20
    };
};

但是,我的 IDE 抱怨

Redefinition of enumerator 'type1' previous definition is here

显然也关于

type2

Redefinition of enumerator 'type2' previous definition is here 

抱怨

type1
中定义的
type2
ZERO_ADC_OFFSET

我想知道我应该如何更改我的数据结构,甚至在这种情况下我应该使用什么数据结构?

c++ data-structures enums
3个回答
3
投票

看起来你以奇怪的方式组织符号(本末倒置)。

考虑将其更改为这种形式

struct ImuTempretureCharacteristic {
   double gain;
   double offset;
};

constexpr ImuTempretureCharacteristic type1{4, 15};
constexpr ImuTempretureCharacteristic type2{256, 20};

1
投票

您对第一个代码片段的要求,我将其缩短为这样

float gain = imu::gain::type1;
float offset = imu::offset::type1;

本质上是有 4 个数字,并且能够通过两个级别的命名来访问它们,每个级别都有 2 个可能的替代方案。

我还怀疑你对这 4 个数字实际上是 4 个常量这一事实保持沉默,从某种意义上说,你的程序中永远不会有比这 4 个数字更大的值。

如果上述情况属实,那么您可能会对嵌套命名空间感到满意:

namespace imu {
namespace gain {
double type1 = 4;
double type2 = 256;
}
namespace offset {
double type1 = 15;
double type2 = 20;
}
}

这将允许您所要求的相同语法。

不管怎样,不管我对你意图的猜测是否正确,我都同意你本末倒置。


1
投票

枚举数'type1'先前定义的重新定义在这里

枚举并不像你想象的那样工作。不过,至少在范围上是这样的。您需要学习 C 风格

enum class
和 C++
enum

我想知道我应该如何更改我的数据结构,甚至在这种情况下我应该使用什么数据结构?

一些示例代码受到高度赞赏。

你也可以用常量中的名称来“命名空间”,用下划线分隔:

enum class

将分组常量打包到结构体中

但是这个

// Definitions constexpr float IMU_TEMP_CHARACTERISTICS_GAIN_TYPE1 = 4; constexpr float IMU_TEMP_CHARACTERISTICS_GAIN_TYPE2 = 256; constexpr float IMU_TEMP_CHARACTERISTICS_ZERO_ADC_OFFSET_TYPE1 = 15; constexpr float IMU_TEMP_CHARACTERISTICS_ZERO_ADC_OFFSET_TYPE2 = 20; // Usage float gain = IMU_TEMP_CHARACTERISTICS_GAIN_TYPE1; float offset = IMU_TEMP_CHARACTERISTICS_ZERO_ADC_OFFSET_TYPE1;

方法更好,我更喜欢使用:

struct

© www.soinside.com 2019 - 2024. All rights reserved.