¿Por qué mis asignaciones de mapas provocan un error de compilación?

No puedo entender por qué esto no se compilará:

#include <map>
#include <string>

std::map<std::string, std::string> m;
m["jkl"] = "asdf";

Recibo este error del compilador:

Line 5: error: expected constructor, destructor, or type conversion before '=' token compilation terminated due to -Wfatal-errors.

Juro que debo estar perdiendo algo simple aquí.

preguntado el 12 de junio de 12 a las 11:06

2 Respuestas

m["jkl"] = "asdf" es una expresion. No puede tener una expresión por sí sola fuera del cuerpo de una función. Lo único permitido fuera de los cuerpos de las funciones son las declaraciones y definiciones.

Respondido el 12 de junio de 12 a las 11:06

m["jkl"] = "asdf" es una expresion, m["jkl"] = "asdf"; es una declaración. Sí, ya que preguntas, a veces hasta yo mismo me aburro. - steve jesop

No tenía idea de que ese era el caso. Supongo que nunca lo había probado antes. Gracias. - Tim MB

Sería bueno si los compiladores pudieran simplemente decir eso: "Declaración encontrada fuera de la función". Es un error bastante común, por ejemplo, cuando agrega accidentalmente un superfluo } a una función. - MSalters

Esa asignación debe estar dentro de una función (es decir, alcance del bloque). Si desea inicializar el mapa, deberá hacerlo en el punto de definición. Aquí es una pregunta SO relacionada (al inicializar map en el alcance del archivo).

contestado el 23 de mayo de 17 a las 12:05

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.