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);