En fait lorsque tu compiles séparemment chaque fichier cpp utilisant msg.hpp, il intègre la définition de tes variables dans le .o
Au linkage, au moment de recoller les .o, il obtient donc une multidéfinition.
Je pense que le plus simple et le plus propre est de définir des fonctions :
const char *get_valueNegativeMsg();
const char *get_valueTooSmallMsg();
const char *get_valueTooBigMsg();
et de les implémenter dans msg.cpp.
Bonne chance


