2013-07-31 7 views
2

Je ne comprends pas pourquoi mon compilateur m'avertit d'une conversion obsolète de chaîne en caractère char.C++ - Conversion obsolète de la chaîne de caractères en caractère

c'est là se plaint de l'avertissement:

Juste un peu de fond de ce que je fais .. Je suis en train de comprendre et la pratique des exceptions ... Je ne suis pas sûr si son meilleur juste pour travailler avec char [1000] pour le prénom et ainsi de suite .. Je vais vraiment apprécier si quelqu'un aide à comprendre l'avertissement et m'aider à trouver une solution .. Merci ..

====== ============================================= ==========================

class TeLoEnYuco 
{ 
string FN, LN, R; 
    double Income; 

public: 
    const char *getters(){return FN.data(), LN.data(), R.data();} 
    virtual char *getFacilityAccess()=0; 
    TeLoEnYuco(char *fn, char *ln, char r, double inc) 
    { 
     if(fn==0) throw Exception(1, "First Name is Null"); //Warning #1 
     if(ln==0) throw Exception(2, "Last Name is Null"); //Warning #2 
     if(r==0) throw Exception(3, "Rank is Null");  //Warning #3 
     if(inc<=0) throw Exception(4, "Income is Null"); //Warning #4 

     FN=fn; 
     LN=ln; 
     R=r; 
     Income=inc; 
    } 
}; 

===================== Classe d'exception ====================== =======

class Exception 
{ 
    int Code; 
    string Mess; 

public: 
    Exception(int cd, char *mess) 
    { 
     Code=cd; 
     Mess=mess; 
    } 
    int getCode(){return Code;} 
    const char *getMess(){return Mess.data();} 
}; 
+1

Quelle ligne est l'erreur? Quel est le message d'erreur réel? –

+0

Comment 'Exception' est-il défini? –

+2

'getters' renvoie 3 valeurs? –

Répondre

14

Je suppose que la signature du constructeur de Exception est

Exception(int, char*) 

Vous passez une chaîne littérale comme paramètre, dont le type réel est const char*, mais la conversion implicite char* est légal pré-C++ 11 (mais déconseillé, donc vous obtenez l'avertissement).

Modifier la signature à

Exception(int, const char*) 

ou, mieux encore,

Exception(int, const std::string&) 

Pour résumer:

char* x  = "stringLiteral"; //legal pre-C++11, deprecated 
const char* y = "stringLiteral"; // good 
std::string z ("stringLiteral"); // even better 
+0

Le type d'un littéral de chaîne est 'const char [N]' –

Questions connexes