1. ホーム
  2. c++

[解決済み] C++ Member Reference の基本型 'int' が構造体または共用体でない。

2022-02-02 02:36:25

質問

C++のコードで問題に遭遇しています。

私はユニオン StateValue :

union StateValue
{
    int intValue;
    std::string value;
};

と構造体 StateItem

struct StateItem
{
    LampState state;
    StateValue value;
};

型のベクトルを通過させるメソッドがあります。 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;
    }
}

の場合 Hue 以下のようなコンパイラーエラーが発生します。

メンバ参照ベースタイプ 'int' は構造体または共用体ではありません。

この問題は理解できません。 どなたか助けていただけませんか?

解決方法を教えてください。

のメンバー関数を呼び出そうとしています。 intValue であり、型 int . int はクラス型ではないので、メンバ関数を持ちません。

C++11以降では、便利な std::to_string を変換する関数です。 int およびその他の組み込み型から std::string :

result += ", \"hue\": " + std::to_string(st.value.intValue);

歴史的には、文字列のストリームをいじる必要があったのです。

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