Dev - C++ - map::map no retiene datos al llamar la funcion de la clase que lo contiene

 
Vista:
Imágen de perfil de Augusto Lautaro
Val: 16
Ha disminuido 1 puesto en Dev - C++ (en relación al último mes)
Gráfica de Dev - C++

map::map no retiene datos al llamar la funcion de la clase que lo contiene

Publicado por Augusto Lautaro (9 intervenciones) el 24/04/2020 03:19:35
Hola! Tengo un problema y no encuentro nada en Google
Este es el código...
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#include <iostream>
#include <map>
#include <string>
 
class Var{
    private:
        map<string, string> varmap;
    public:
        void setVar(string name, string type, string value);
        string getVar(string name);
};
void Var::setVar(string name, string type, string value){
    varmap.insert({name, value});
}
string Var::getVar(string name){
    string bufferOut;
    bufferOut = varmap[name];
    return bufferOut;
}

Yo guardo una variable con setVar, pero cuando la quiero obtener con getVar, la variable ya no existe :(
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de Alfil
Val: 4.344
Oro
Ha mantenido su posición en Dev - C++ (en relación al último mes)
Gráfica de Dev - C++

map::map no retiene datos al llamar la funcion de la clase que lo contiene

Publicado por Alfil (1444 intervenciones) el 24/04/2020 17:52:04
Cambia la línea 13 por:

1
std::varmap.insert(pair<string, string>(name, value));

Ten en cuenta además que si no utilizar using namespace std; debes colocar delante de cada palabra clave std::

1
std::varmap.insert(pair<string, string>(name, value));
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
Imágen de perfil de Augusto Lautaro
Val: 16
Ha disminuido 1 puesto en Dev - C++ (en relación al último mes)
Gráfica de Dev - C++

map::map no retiene datos al llamar la funcion de la clase que lo contiene

Publicado por Augusto Lautaro (9 intervenciones) el 24/04/2020 18:21:17
Todavia no funciona. Se pueden obtener los datos desde la funcion Var::setVar() pero no desde Var::getVar :(
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Alfil
Val: 4.344
Oro
Ha mantenido su posición en Dev - C++ (en relación al último mes)
Gráfica de Dev - C++

map::map no retiene datos al llamar la funcion de la clase que lo contiene

Publicado por Alfil (1444 intervenciones) el 24/04/2020 19:30:11
El parámetro string type de del método setVal no se utiliza, y lo he omitido.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
#include <iostream>
#include <map>
#include <string>
 
using namespace std;
 
class Var
{
    private:
        map<string, string> varmap;
 
    public:
        void setVar(string name, string value);
        string getVar(string name);
 
};
 
void Var::setVar(string name, string value)
{
    varmap.insert(pair<string, string>(name, value));
}
 
string Var::getVar(string name)
{
    string bufferOut;
    bufferOut = varmap[name];
 
    return bufferOut;
}
 
int main()
{
    Var v;
 
    v.setVar("uno", "dos");
 
    cout << "\nValue: " << v.getVar("uno") << endl;
 
    return EXIT_SUCCESS;
}

El método también funcionaría así:

1
2
3
4
string Var::getVar(string name)
{
    return varmap[name];
}
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
Imágen de perfil de Augusto Lautaro
Val: 16
Ha disminuido 1 puesto en Dev - C++ (en relación al último mes)
Gráfica de Dev - C++

map::map no retiene datos al llamar la funcion de la clase que lo contiene

Publicado por Augusto Lautaro (9 intervenciones) el 24/04/2020 20:10:32
Perdon, tengo una ultima duda. Como hago para utilizar Var::getVar() en una funcion diferente, por ejemplo:
1
2
3
4
5
6
7
8
void set(string name, value){
    Var v;
    v.setVar(name, value);
}
void get(string name){
    Var v;
    v.getVar(name);
}
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Alfil
Val: 4.344
Oro
Ha mantenido su posición en Dev - C++ (en relación al último mes)
Gráfica de Dev - C++

map::map no retiene datos al llamar la funcion de la clase que lo contiene

Publicado por Alfil (1444 intervenciones) el 24/04/2020 20:49:35
El objeto lo debes crear bien en otra clase (por composición), bien en el int main(), pero no tiene sentido crearlo dentro del mismo método de su propia clase.

El uso habitual de map es utilizando como ID (primer valor) o bien un char o un int. En el caso de utilizar un int se usa conjuntamente con un enum (si se conoce el numero de elementos):


1
2
3
4
5
6
7
8
9
10
11
12
13
enum ID
{
	Uno,
	Dos,
	Tres,
	Elements
}
 
mymap.insert(pair<int, string>(0, "dato"));
 
....
 
return mymap[Uno]; 		// devuelve dato

En este caso Elements no se utiliza como elemento, indica el número de elementos que hay en el enum, es útil en iteradores.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar