Error de conversión incompatible al asignar, aunque lo capturo con una instrucción if en C++11.
template <typename t=""> using Map = std::map<std::string, t="">;
class object_index {
public:
object_index(){};
int cntr = 0;
Map<int> MapInt;
Map<bool> MapBool;
Map<std::string> MapStr;
Map<double> MapDouble;
template <typename v=""> void insert2Map(V lhs) {
if (std::is_same<v, int="">::value) {
std::cout << "INT: ";
std::string key = std::to_string(cntr);
MapInt[key] = lhs; // ERROR
/* conversión incompatible de puntero a entero.
Se intenta asignar a 'std::map<><><char>>, int>::mapped_type' (es decir, 'int')
desde 'const char *' */
}
if (std::is_same<v, const="" char="" *="">::value) {
std::cout << "STR: ";
}
if (std::is_same<v, bool="">::value) {
std::cout << "BOOL: ";
}
if (std::is_same<v, double="">::value) {
std::cout << "DOUBLE: ";
}
std::cout << lhs << std::endl;
}
}
template <typename ob=""> object_index &operator,(Ob obj) {
insert2Map(obj);
++cntr;
return *this;
}
// o1[valores 1.3, 2, 4, "hola"];
};
class object {
public:
void operator[](object_index index) { item = index; }
private:
object_index item;
};
<h1>definir valores object_index(),</h1>
int main(void) {
object o1 = object();
o1[valores 1.3, 2, true, "hola"];
return 0;
}
DESCARGO DE RESPONSABILIDAD: Sé que no hay razón para usar esta sintaxis extraña, es para un proyecto universitario que lo solicita.
Nunca debería recibir un argumento de un tipo incompatible, lo verifico antes de usarlo. ¿Cómo puedo solucionar esto? ¿O el compilador tiene razón? ¿Cómo puedo lograrlo correctamente?</v,></v,></v,></v,></std::string,>
davy.ai
El error del compilador indica que se está asignando una clave de tipo string a un valor de tipo entero en el mapa
MapInt
, lo cual no es compatible. Esto sucede porque el parámetrolhs
que se pasa ainsert2Map
es de tipoconst char*
cuandoV
esint
.Para evitar este error, puedes agregar una verificación adicional para
const char*
en la condiciónis_same
y convertir el parámetrolhs
aint
usandostd::stoi
antes de asignarlo al mapa. De esta manera, cualquier valor de string que se pase como entero será convertido a un valor entero real.La función
insert2Map
modificada se vería así:Con esta modificación, la función manejará correctamente los valores enteros pasados como strings sin producir el error de conversión de puntero incompatible a entero.</v,></v,></v,></v,>