c++ - left - strstr
¿Cómo defino constantes de cadena en C++? (4)
Debe poner const std::string MainController::SOME_URL = "www.google.com";
definición en un solo archivo de origen, no en el encabezado.
Posible duplicado:
Cadena constante estática de C ++ (miembro de clase)
el miembro de la clase estática const C ++ inicializado da un error de símbolo duplicado al vincular
Mi experiencia con C ++ es anterior a la adición de la clase de cadena, por lo que estoy empezando de nuevo de alguna manera.
Estoy definiendo mi archivo de encabezado para mi clase y quiero crear una constante estática para una url. Intento esto haciendo lo siguiente:
#include <string>
class MainController{
private:
static const std::string SOME_URL;
}
const std::string MainController::SOME_URL = "www.google.com";
Pero esto me da una definición duplicada durante el enlace.
¿Cómo puedo lograr esto?
Defina la clase en el archivo de cabecera:
//file.h
class MainController{
private:
static const std::string SOME_URL;
}
Y luego, en el archivo fuente:
//file.cpp
#include "file.h"
const std::string MainController::SOME_URL = "www.google.com";
Mueve el
const std::string MainController::SOME_URL = "www.google.com";
a un archivo cpp. Si lo tiene en un encabezado, entonces cada .cpp que lo incluya tendrá una copia y obtendrá un error de símbolo duplicado durante el enlace.
Necesitas poner la linea
const std::string MainController::SOME_URL = "www.google.com";
en el archivo cpp, no en el encabezado, debido a la regla de una definición . Y el hecho de que no pueda inicializarlo directamente en la clase se debe a que std::string
no es un tipo integral (como int).
Alternativamente, dependiendo de su caso de uso, puede considerar no hacer un miembro estático sino usar un espacio de nombres anónimo en su lugar. Ver este post para pro / contr .