C++ 被迫进行奇怪的转换以摆脱 "expression should be a modifiable lvalue"

标签 c++ enums casting

<分区>

我刚刚遇到一个奇怪的枚举分配问题,我认为你可以帮助我。我有一个这样的枚举:

enum LIB_EDXENGINE CameraFeatureDataType
    {
        CFDT_ENUMERATION,
        CFDT_64BITS_UINT,
        CFDT_64BITS_INT,
        CFDT_64BITS_FLOAT,
        CFDT_BOOLEAN,
        CFDT_32BITS_UINT,
        CFDT_32BITS_INT,
        CFDT_32BITS_FLOAT,
    };  

我有一个包含此枚举实例的类。
已编辑:

const CameraFeatureDataType & LibEDX::CVBGenicamFeature2::GetFeatureType() const
{
    switch (m_eNodeType)
    {
    case NT_Boolean:
        m_eCameraFeatureDataType = CFDT_BOOLEAN;
        break;
    case NT_Integer:
        m_eCameraFeatureDataType = CFDT_64BITS_INT;
        break;
    case NT_Float:
        m_eCameraFeatureDataType = CFDT_64BITS_FLOAT;
        break;
    case NT_Enumeration:
        m_eCameraFeatureDataType = CFDT_ENUMERATION;
        break;
    }
    return m_eCameraFeatureDataType;
}

我发现消除错误的唯一解决方案是将成员变量转换为它自己的类型,我认为这很奇怪。
编辑过:

const CameraFeatureDataType & LibEDX::CVBGenicamFeature2::GetFeatureType() const
{
    switch (m_eNodeType)
    {
    case NT_Boolean:
        (CameraFeatureDataType)m_eCameraFeatureDataType = CFDT_BOOLEAN;
        break;
    case NT_Integer:
        (CameraFeatureDataType)m_eCameraFeatureDataType = CFDT_64BITS_INT;
        break;
    case NT_Float:
        (CameraFeatureDataType)m_eCameraFeatureDataType = CFDT_64BITS_FLOAT;
        break;
    case NT_Enumeration:
        (CameraFeatureDataType)m_eCameraFeatureDataType = CFDT_ENUMERATION;
        break;
    }
    return m_eCameraFeatureDataType;
}

最佳答案

你把方法声明为const然后你做成员属性修改:

const CameraFeatureDataType & LibEDX::CVBGenicamFeature2::GetFeatureType() const
{
switch (m_eNodeType)
{
case NT_Boolean:
    this->m_eCameraFeatureDataType = CFDT_BOOLEAN;
    break;
case NT_Integer:
    this->m_eCameraFeatureDataType = CFDT_64BITS_INT;
    break;
case NT_Float:
    this->m_eCameraFeatureDataType = CFDT_64BITS_FLOAT;
    break;
case NT_Enumeration:
    this->m_eCameraFeatureDataType = CFDT_ENUMERATION;
    break;
}
return this->m_eCameraFeatureDataType;
}

你应该写:

const CameraFeatureDataType & LibEDX::CVBGenicamFeature2::GetFeatureType() const
{
switch (m_eNodeType)
{
case NT_Boolean:
    return CFDT_BOOLEAN;
case NT_Integer:
    return CFDT_64BITS_INT;
case NT_Float:
    return CFDT_64BITS_FLOAT;
case NT_Enumeration:
    return CFDT_ENUMERATION;
}
return CFDT_UNKNOWN;//change to default value
}

关于C++ 被迫进行奇怪的转换以摆脱 "expression should be a modifiable lvalue",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47181999/

相关文章:

c++ - 使用 ostream 格式化整数输出

java - 实例化/从枚举返回时类型安全的接口(interface) (Java)

c - 枚举作为c函数中的参数

c# - 如何将对象转换为作为参数传递的类型

c# - 动态 double 的 Linq 平均值

c++ - 将 32 位 float 打包成 30 位 (c++)

c++ - 将 .cpp 文件编译为程序内部的 EXE(EXE 文件)

c++ - 为什么我的 fstream 不能正确打开?

c# - 如何覆盖 C# 中的枚举?

c++ - 将无符号短裤数组转换为无符号字符数组