OVH Cloud OVH Cloud

Un temporaire a été utilisé pour initialiser...

2 réponses
Avatar
Michaël Delva
Bonsoir,

en compilant mon programme (avec BCB 6), j'ai eu l'avertissement suivant:

[C++ Avertissement] FicheAnalyseColl.cpp(169): W8028 Un temporaire a été
utilisé pour initialiser 'TA'

Voici les infos nécessaires:

class Analyse_Donnees
{
public:
//Nom de la stat + Frame de la stat
typedef pair<AnsiString,int> Paire_Ansi_Int;
//nom de la stat + liste des Frames
typedef vector<Paire_Ansi_Int> ActionsUneStat;
typedef ActionsUneStat::iterator ite_Stat;
//Nom du joueur + stats
typedef map<AnsiString, ActionsUneStat> ActionsJoueurs;
typedef ActionsJoueurs::iterator ite_Action_Joueur;
//Equipe + Joueurs
typedef map<AnsiString, ActionsJoueurs> ToutesActions;
typedef ToutesActions::iterator ite_Action_Equipe;

const ToutesActions & m_TA() const { return this->TA; }
private:
ToutesActions TA;
};

Et l'avertissement a lieu à cette ligne, dans une autre classe:

Analyse_Donnees::ToutesActions & TA = A_D->m_TA();

Par contre si je mets la ligne de déclaration de TA en public et que je
mets:

Analyse_Donnees::ToutesActions & TA = A_D->TA;

Je n'ai plus ce problème.

BCB dit qu'il me met cet avertissement:

En C++, une variable ou un paramètre de type référence doit se voir
affecter une référence à un objet du même type. Si les types ne sont pas
identiques, la valeur est affectée à un temporaire du bon type, et
l'adresse du temporaire est affecté à la variable ou au paramètre de
référence. Cet avertissement signifie que la variable ou le paramètre de
référence ne désigne pas ce qui était prévu, mais une variable temporaire
autrement inutilisée.

Hors, j'affecte une référence du même type!!

Pourriez vous m'expliquer ce qui cloche?

2 réponses

Avatar
Fabien LE LEZ
On 03 Sep 2003 20:57:39 GMT, "Michaël Delva"
wrote:

const ToutesActions & m_TA() const { return this->TA; }
private:
ToutesActions TA;
};

Et l'avertissement a lieu à cette ligne, dans une autre classe:

Analyse_Donnees::ToutesActions & TA = A_D->m_TA();


Tu essaies de convertir un "const ToutesActions &" en un
"ToutesActions &". Ce n'est pas possible, donc le compilateur crée un
objet temporaire non-const.

Avatar
Michaël Delva
Tu essaies de convertir un "const ToutesActions &" en un
"ToutesActions &". Ce n'est pas possible, donc le compilateur crée un
objet temporaire non-const.




Donc il faut que j'enlève un const...

Mais lequel des deux?