2010-04-05 5 views
2

Donc, j'ai défini une classe commeGDB ignore mon code!

DataLoggingSystemStateReceiver 
{ 
DataLoggingSystemStateReceiver() 
: // initializer list 
{ 
    // stuff 
} 

// ... other functions here 

}; 

En principal, j'instancier DataLoggingSystemStateReceiver comme ceci:

int main() 
{ 
    // ... run stuff 
    Sensor sensor(port, timer); 

    DataLoggingSystemStateReceiver dlss(); 

    Log::notice("started"); 
    return 0; 
} 

Cependant, quand je fais un pas dans ce code dans gdb, il fonctionne:

Sensor sensor(port, timer); 

skips

DataLoggingSystemStateReceiver dlss(); 

et se poursuit avec

Log::notice("started"); 

Qu'est-ce qui se passe?


EDIT: En changeant

DataLoggingSystemStateReceiver dlss(); 

à

DataLoggingSystemStateReceiver dlss; 

en main(), la ligne est exécutée. Quelqu'un peut-il expliquer pourquoi?

+2

juste pour être sûr: utilisez -g' pour compiler votre code? –

+0

Oui, j'utilise -g. –

Répondre

9

Ce:

DataLoggingSystemStateReceiver dlss(); 

ne déclare pas une variable automatique. Il déclare une fonction nommée dlss qui ne prend aucun argument et renvoie un DataLoggingSystemStateReceiver.

Vous voulez:

DataLoggingSystemStateReceiver dlss; 

L'objet sera default initialisé, donc pour votre type de classe, le constructeur par défaut sera appelée.

+0

Ce comportement se produit-il parce que le constructeur par défaut de l'objet ne prend aucun argument? –

+7

@sheep: Non. C'est juste un défaut de la syntaxe, on l'appelle "l'analyse la plus vexante". Le compilateur lit simplement ceci comme la déclaration d'une fonction, cela n'a rien à voir avec votre classe. – GManNickG

+0

Cool. Merci pour l'explication! –

Questions connexes