Mon cours a ce membre.Std :: vector est initialisé à la poubelle. Comportement étrange. Des idées sur quoi?
std::vector<AvaWrapper> m_controls;
Dans mon constructeur j'appelle
m_controls.clear()
Puis j'appelle une fonction membre qui m_controls.clear fait() à nouveau, mais il souffle avec une assertion. Le débogueur montre que m_controls a un demi-million ou plus d'entrées, bien qu'aucune d'entre elles ne soit valide car le débogueur affiche "Erreur: l'expression ne peut pas être évaluée" lorsque je développe l'arborescence. Donc, mon intuition est que la classe n'est pas créée correctement parce que ce code a fonctionné mais j'ai ensuite dérivé une classe de cette classe et j'appelle new() pour créer le parent. Dans son nouveau rôle de classe de base, ça explose. Le pointeur this indique cependant que toutes les autres variables membres ont des données valides, donc mon intuition est fausse. Le constructeur est appelé aussi. Des idées? Merci.
MAJ2:
Train::Train() : SpriteWindowFrame(200)
{
s_mutexProtectingTheGlobalData = new wxMutex();
m_window_rect = NULL;
m_thread = NULL;
m_ok = false;
m_accumulate_timer = new wxTimer();
m_accumulate_timer->SetOwner(this, ACCUMULATE_TIMER_ID);
m_autohide_timer = new wxTimer();
m_autohide_timer->SetOwner(this, AUTOHIDE_TIMER_ID);
m_autohide = false;
m_autohide_period = 5000;
m_controls.clear();
}
MISE À JOUR:
//This version works.
SpaceInit::SpaceInit()
{
//Use INI config store. If you need something else, just
//create the appropriate object.
m_config_store = new IniConfigStore();
//Start up config.
Init();
m_t = new Trains();
return;
}
SpaceInit::~SpaceInit()
{
wxDELETE(m_config_store);
return;
}
Je peux le faire: m_t-> SomeMemberFunctionThatManipulatesVector()
et cela fonctionne.
Celui-ci ne
SpaceInit::SpaceInit():Trains()
{
//Use INI config store. If you need something else, just
//create the appropriate object.
m_config_store = new IniConfigStore();
//Start up config.
Init();
return;
}
Je ne peux pas faire: SomeMemberFunctionThatManipulatesVector()
souffle sur vecteur.
Je viens de remarquer que le pointeur this est vraiment foiré dans le consturctor par défaut de Train(). Je pensais que ce n'était pas mais ça l'est. Le constructeur Trains s'exécute mais tout est saccagé.
Le code du constructeur My Trains est géré par l'usine. Juste initialiser des choses, de nouvelles choses, etc. Le SpaceInit est créé avec SpaceInit * t = new SpaceInit(); Train est une classe dérivée alors peut-être que cela a quelque chose à voir avec ça?
Pourriez-vous éventuellement nous donner le fichier d'en-tête et tout le code pertinent? – Smashery
Quels sont les paramètres du template à std :: vector? Cela pourrait nous donner un indice –
Vous devez d nous donner plus de code. Votre simplification ne suffit pas, et à cela, c'est faux. Vous ne pouvez pas avoir un membre 'std :: vector m_controls;' car ce n'est pas une utilisation valide de 'vector'. – GManNickG