Error “no match operator[]” al introducir datos en un map dentro de un objeto – c++ map object

Pregunta:


Estoy tratando de guardar datos en un mapa dentro de un objeto y recibo este error en var[name]=val y en var[name]:

no match operator[]

header

#include <string>
#include <map>
using namespace std;

class Calculator{
public: 
    void addVal(string name, int val);
    int getVal(string name);
private:
    int memory;
    map <string,int>* var;
};

cpp

#include "Calculator.h"
#include <string>
#include <map>
using namespace std;

Calculator::Calculator():
memory(0), var(new map<string, int>)
{}
void Calculator::addVal(string name, int val){

    var[name]=val;

}

int Calculator::getVal(string name){
    return var[name];

}

¿Qué estoy haciendo mal?

Preguntado por: Diego Fernando Martinez

eferion

class Calculator{
private:
    map <string,int>* var;
//                  ^
};

Fíjate en ese asterisco… gracias a él, var es un puntero. Si el acceso al mapa se hace a través de un puntero tendrías que escribir algo tal que:

void Calculator::addVal(string name, int val){
    (*var)[name]=val;
}

Aunque también podrías hacer lo siguiente:

void Calculator::addVal(string name, int val){
    var->operator[](name)=val;
}

Aun así todo indica a que el error en tu caso es el uso del asterisco. Bórralo y entonces podrás acceder a los métodos del mapa sin problemas.

Como nota final, procura no hacer uso de using namespace en los ficheros de cabecera. En programas más grandes te puede dar problemas.

Tu código corregido luciría así:

class Calculator{
public: 
    void addVal(string name, int val);
    int getVal(string name);
private:
    int memory;
    map <string,int> var;
};

Calculator::Calculator()
  : memory(0)
{ }
void Calculator::addVal(string name, int val){
  var[name]=val;
}

int Calculator::getVal(string name){
  return var[name];
}

Si lo compilas, te da los errores:

  • Las funciones miembro addVal y getVal no tienen el retorno en la declaración mas si la tienen en la definición, así que el compilador no sabe identificarlas.
  • getVal está declarado con los parámetro (string, name) y definido con el parámetro (string name).
  • Defines el constructor de Calculator pero no lo declaras.
  • var es un puntero no un objeto, para usarlo deberías primero des-referenciar y luego usar: (*var)[name] = val y return (*var)[name].

Por cierto, no borras var en el destructor.

¿Has intentado compilar o entender los errores? Parecen bastante autoexplicativos.

Fuente

Related Posts:

Declarar un array de structs de tamaño dinamico – c++
Pregunta: buenas, lo que quiero conseguir es declarar un struct con array que tenga su tamaño dinamico, pero cuando lo hago el programa se me ...
Problemas con el registro de un archivo .tlb – c# windows vb6
Pregunta: La situación es la siguiente: He creado un pequeño proyecto de librería de clases en C# que me permita realizar ciertas operaciones. El nombre del ...
Uso de js y c# en unity. ¿Igual rendimiento? – javascript c# unity3d
Pregunta: Estoy comenzando con unity . Y veo que se pueden usar c# y js para programar. Mi pregunta es si tanto c# como js ...
Cómo puedo incluir librería beecrypt en un proyecto en C – c
Pregunta: Tengo un archivo .lib (librería) y quiero usarla en un proyecto de C. Para ser más especifica estoy intentando instalar beecrypt que es una librería ...
Ocultar y Mostrar con Mapa de Google – javascript c# asp.net
Pregunta: Tengo un div en mi página ASP.NET que contiene un Mapa de Google, y necesito mostrarlo y ocultarlo pero no me funciona. Este es el ...
para que sirve #ifdef_MSDOS_ en c++? – c++
Pregunta: He tenido problemas porque donde trabajo usan una versión de dev c++ 4.9 y yo uso en mi hogar la 5.1, ...
¿Como instalar C# en SublimeText? – c# sublimetext3 sublimetext
Pregunta: El problema es que actualmente quiero programar sobre esta tecnologia, pero no quiero descargar aun el visual studio porque consume recursos y es bastante ...
convertir array a Map en javascript – javascript map nodejs
Pregunta: quiero convertir un arreglo a Map(), en este console "console.log(arrayParaMap);" sale undefined el ejemplo que uso es este //example {a:1,a:2,a:1,b:1,b:5,b:6} el map que prentendo obtener es ...
Thread en c++ error compilacion – c++
Pregunta: Estoy empezando con threads y he estado siguien varios tutos y creo que esta todo bien, pero a la hora de ejecutarlo me da ...
¿Es posible capturar un segfault con try/catch? – c++ try-catch
Pregunta: Para comprobar si es posible hice lo siguiente: try { int *x = 0; *x = 1234; } catch(...) { ...
Conexion C# con PostgreSQL mediante proveedor Npgsql – c# postgresql
Pregunta: Hola el problema es que la conexión esta bien solo cuando estoy utilizando el ODBC, pero cuando lo cambio al proveedor de PostgreSQL Npgsql, ...
Construcción extraña: objeto = funcion1() && funcion2() ¿Posible? – c#
Pregunta: acabo de encontrarme en una documentación una construcción como esta: var pose = Body.LeftHand.Near(Body.Head) && Body.LeftArm.Bended(90); posees una objeto que debe crearse a partir de la ...
Cómo importar datos de un Excel a DataGrid pero iniciarlo en la segunda fila? – c# sql-server postgresql
Pregunta: Disculpen una duda, como cargar de excel un formato iniciando en la segunda fila? tengo este código solamente que el excel esta justificado en ...
No completa el ciclo foreach – c#
Pregunta: Estoy haciendo un método para invertir palabras que contengan 5 o mas letras. El problema que tengo es que si mi cadena tiene mas ...
Obtener elementos específicos de un array – c array optimización
Pregunta: Buenas, si yo por ejemplo hago: char buf; fgets(buf, 1024, stdin); ¿Puedo coger los caracteres que escribí del array sin coger los elementos que no utilicé? ¿O ...
Tags:, ,

Add a Comment

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