C++成员引用基类型'int'不是结构或联合

Ale*_*lex 11 c++

我在我的C++代码中遇到了问题.

我有一个工会StateValue:

union StateValue
{
    int intValue;
    std::string value;
};
Run Code Online (Sandbox Code Playgroud)

和结构 StateItem

struct StateItem
{
    LampState state;
    StateValue value;
};
Run Code Online (Sandbox Code Playgroud)

我有一个方法,它通过一个类型的向量 StateItem

for(int i = 0; i < stateItems.size(); i++)
{
    StateItem &st = stateItems[i];
    switch (st.state)
    {
        case Effect:
            result += std::string(", \"effect\": ") + st.value.value;
            break;
        case Hue:
            result += std::string(", \"hue\": ") + st.value.intValue.str();
            break;
        case On:
            result += std::string(", \"on\": ") + std::string(st.value.value);
            break;
        default:
            break;
    }
}
Run Code Online (Sandbox Code Playgroud)

在这种情况下,Hue我得到以下编译器错误:

Member reference base type 'int' is not a structure or union

我不明白这里的问题.你能有人帮我吗?

Mik*_*our 11

您正在尝试调用intValue具有类型的成员函数int.int不是类类型,因此没有成员函数.

在C++ 11或更高版本中,有一个方便的std::to_string函数可以转换int和其他内置类型std::string:

result += ", \"hue\": " + std::to_string(st.value.intValue);
Run Code Online (Sandbox Code Playgroud)

从历史上看,你不得不乱用字符串流:

{
    std::stringstream ss;
    ss << st.value.intValue;
    result += ", \"hue\": " + ss.str();
}
Run Code Online (Sandbox Code Playgroud)