2017-03-19 2 views
2

J'ai la ligne suivante de code qui fonctionne très bien:Impossible de déduire automatiquement const &

const auto& dict = m_DictionaryAbbreviationsAndEnglish.Content; 

Maintenant, je voulais introduire un « if-then » clause, mais le compilateur me dit « ne peut pas en déduire type 'auto' (initalizer obligatoire):

const auto& dict; 

if (uSkipAbbreviationsAndEnglish) 
{ 
    dict = m_DictionaryNoAbbreviationsNoEnglish.Content(); 
} 
else 
{ 
    dict = m_DictionaryAbbreviationsAndEnglish.Content(); 
} 

Cependant, quand je l'initialisons comme ça ...

const auto& dict=NULL; 

..., je suis incapable d'assigner « dic t » en utilisant ce code:

dict = m_DictionaryNoAbbreviationsNoEnglish.Content(); 

L'erreur est "l'expression doit être une lValue modifiable"

Quelqu'un peut-il me dire comment faire cela correctement.?

Merci.

ps: Le contenu est le suivant:

map<wstring,wstring> &clsTranslations::Content() 
{ 
    return m_content; 
} 
+0

Ne pas utiliser 'auto' ici, il est probablement pas la peine. – DeiDei

+1

Vous ne pouvez pas réaffecter une référence. Jetez un oeil à [ici] (http://stackoverflow.com/questions/728233/why-are-references-not-reseatable-in-c). – Shibli

+0

Les constantes doivent être initialisées – Sniper

Répondre

6

C'est ce que l'opérateur conditionnel est pour:

const auto& dict = uSkipAbbreviationsAndEnglish ? 
        m_DictionaryNoAbbreviationsNoEnglish.Content() : 
        m_DictionaryAbbreviationsAndEnglish.Content();