0
votes

Problème avec l'argument de pointeur de caractère dans un constructeur (C ++)

J'ai commencé à apprendre C ++ sur un livre il y a quelque temps et maintenant je suis coincé avec une partie du code du livre qui ne fonctionne pas sur mon API, qui est Visual Studio 2019. Le livre est à partir de 2000, donc cette Peut-être faire partie du problème, mais si c'est pourriez-vous dire à ma façon de le corriger?

Le problème est dans le code suivant. L'auteur du livre souhaite utiliser un tableau de charcuterie comme argument pour le constructeur et le fait avec un pointeur (char * pname). Cependant, Visual Studio souligne l'argument ("0. Dannyboy"). J'ai regardé autour des réponses, mais personne ne ressemble à la mienne. Il serait très apprécié si quelqu'un pouvait m'aider! xxx


3 commentaires

Utilisez le qualificatif Const dans la déclaration de paramètre Student (Cons-Char * pname) Literyms de chaîne en C ++ comportant des types de matrices de caractères constants.


Quel livre utilisez-vous? Cela ne fonctionnerait pas non plus en 2000. Puis-je recommander un Good C ++ Book ?


J'ai commencé à apprendre C ++ sur un livre - N'apprenez pas de plus de 20 livres de plus de 20 ans. Le livre a-t-il également recommandé d'utiliser nouveau quand il n'est pas nécessaire? Comme ici: étudiant * ps = nouvel élève ("E. Z. Rider"); ? Cela devrait être étudiant ps ("E. Z. RIDER");


3 Réponses :


1
votes

String Literyms sont de type Const Char [] Quelle dégradation à Const Char * . Votre constructeur devrait prendre un const char * : xxx


0 commentaires

0
votes

sur cette ligne: xxx pré>

Vous passez un littéral à chaîne, qui est de type char [12] code> au constructeur de étudiant code>. P>

Cependant, vous devez utiliser un chartons * code> pour se lier à un tableau code> char code>, de sorte que votre constructeur doit ressembler à ceci: P >

Student(char const * pName) {


0 commentaires

0
votes

in c historiquement littéraux de chaîne comporte des types de matrices de caractères non constants. Et avant que les compilateurs C ++ 11 standard C ++ autorisés à utiliser des littéraux de chaîne en tant qu'arguments de paramètres de type char * pour la compatibilité ascendante.

Cependant, cependant, les littéraux de chaîne ont néanmoins des matrices de caractères non constants Vous ne pouvez pas les changer.

en C ++ 11 Il a été décidé de ne pas permettre d'utiliser des littéraux de chaîne avec le type char * car dans C ++, ils ont des types de matrices de caractères constants. < / p>

alors déclarez le constructeur comme xxx

en tout cas, il est meilleur car cette déclaration indique le lecteur de la classe que la chaîne transbordée ne sera pas modifiée dans le constructeur même si l'argument ne sera pas un littéral à chaîne.


1 commentaires

Merci pour la grande explication! Je l'ai ajouté et tout fonctionne maintenant!