2010-04-15 3 views
2

En ce moment, ma mise en oeuvre renvoie la chose en valeur. Le membre m_MyObj lui-même n'est pas const - sa valeur change en fonction de ce que l'utilisateur sélectionne avec une zone de liste déroulante. Je ne suis pas un gourou C++, mais je veux le faire correctement. Si je colle simplement un & devant GetChosenSourceSystem dans les deux décl. et impl., je reçois une sorte d'erreur de compilation. Si j'en fais un mais pas un autre - une autre erreur. Si je fais return &m_MyObj;. Je ne vais pas énumérer les erreurs ici pour l'instant, à moins qu'il y ait une forte demande pour cela. Je suppose qu'un codeur C++ expérimenté peut dire ce qui se passe ici. Je pourrais omettre la constitude ou la référence, mais je veux le rendre serré et apprendre dans le processus aussi bien. L'objet retourné devra être const, de sorte que vous ne pouvez pas le changer de l'extérieur;Syntaxe pour const accessor par référence

// In header file 
MyObj GetChosenThingy() const; 

// In Implementation file. 
MyObj MyDlg::GetChosenThingy() const 
{ 
    return m_MyObj; 
} 

Répondre

8

// In header file 
const MyObj& GetChosenThingy() const; 

// In Implementation file. 
const MyObj& MyDlg::GetChosenThingy() const 
{ 
    return m_MyObj; 
} 
+0

Vous avez raison ... + 1 – codaddict

+1

Une autre chose à garder à l'esprit. Si, comme je le suppose, m_MyObj est un membre de MyDlg, assurez-vous que la référence n'est pas conservée plus longtemps que l'objet qui l'a renvoyé. Si vous essayez d'accéder à un membre d'un objet qui a été supprimé, rien de bon ne peut arriver. – KeithB

+0

Merci, je le ferai. –

Questions connexes