J'ai un global.h qui ressemble à:Comment initialiser les variables externat dans un espace de noms
#pragma once
#include <memory>
namespace qe
{
class SubSystemA;
class SubSystemB;
class SubSystemC;
namespace Systems
{
extern std::unique_ptr<SubSystemA> gSubSystemA;
extern std::unique_ptr<SubSystemB> gSubSystemB;
extern std::unique_ptr<SubSystemC> gSubSystemC;
}
}
Maintenant, je ne sais pas si je peux l'initialiser dans mon main.cpp mais w/e Je Je fais, ça ne marche pas ... s'il vous plait, conseillez. Voici ce que principale ressemble à:
#include "SubSystemA.h"
#include "SubSystemB.h"
#include "SubSystemC.h"
#include "global.h"
int main()
{
extern std::unique_ptr<qe::SubSystemA> qe::Systems::gSubSystemA;
extern std::unique_ptr<qe::SubSystemB> qe::Systems::gSubSystemB;
extern std::unique_ptr<qe::SubSystemC> qe::Systems::gSubSystemC;
qe::Systems::gSubSystemA = std::make_unique<qe::SubSystemA>();
qe::Systems::gSubSystemB = std::make_unique<qe::SubSystemB>();
qe::Systems::gSubSystemC = std::make_unique<qe::SubSystemC>();
return 0;
}
Fondamentalement, j'obtiens l'erreur « symbole externe non résolu » et je ne sais pas comment je peux le réparer. Toute aide est la bienvenue, merci! Edit: tout en résolvant cela est bon à savoir, des suggestions alternatives à cet égard sont les bienvenues. Je veux juste avoir un accès facile (ne veut pas dire global mais cela ne me dérange pas) au sous-système comme des objets.
Dans le fichier cpp retirer les déclarations 'extern'; vous avez déjà fait # #include "global.h" '. Ajoutez des définitions pour ces éléments à l'un de vos fichiers .cpp. Vous pouvez avoir des initialiseurs sur les définitions ou utiliser des instructions d'assignation comme vous le faites actuellement. –
Suppression fait une erreur de compilation en disant re-définition. Retrait de la ligne entière (les 3 uniques_ptr <>) me donne toujours l'erreur de l'éditeur de liens tout en compilant bien. – ChaoSXDemon