Saltar al contenido

El tipo base de referencia de miembro de C ++ ‘int’ no es una estructura o unión

Solución:

Estás intentando llamar a una función miembro en intValue, que tiene tipo int. int no es un tipo de clase, por lo que no tiene funciones miembro.

En C ++ 11 o posterior, hay una práctica std::to_string función para convertir int y otros tipos integrados para std::string:

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

Históricamente, tendrías que perder el tiempo con los flujos de cadenas:

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

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

int es un tipo primitivo, no tiene métodos ni propiedades.

Estás invocando str() en una variable miembro de tipo int y eso es de lo que se queja el compilador.

Los enteros no se pueden convertir implícitamente en cadenas, pero se pueden usar std::to_string() en C ++ 11, lexical_cast de boost, o el viejo enfoque lento del stringstream.

std::string to_string(int i) {
    std::stringstream ss;
    ss << i;
    return ss.str();
}

o

template <
    typename T
> std::string to_string_T(T val, const char *fmt ) {
    char buff[20]; // enough for int and int64
    int len = snprintf(buff, sizeof(buff), fmt, val);
    return std::string(buff, len);
}

static inline std::string to_string(int val) {
    return to_string_T(val, "%d");
}

Y cambia la línea a:

result += std::string(", "hue": ") + to_string(st.value.intValue);
¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)


Tags : /

Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *