2010-02-03 7 views
1

Je reçois une erreur avec ce code. 'Types incompatibles dans l'affectation de char à char [13]' Je n'arrive pas à comprendre comment initialiser ces tableaux et faire ce travail. Fondamentalement, le programme prend des codes ISBN (4 groupes d'entiers et crée une chaîne avec '-' entre chaque groupe de nombres) et vérifie qu'ils sont corrects. Le programme utilise un ISBN de classe et une fonction principale qui charge les codes ISBN réels et essaie d'utiliser l'ISBN de classe pour les tester. Voici ce que j'ai.types incompatibles dans l'affectation de char?

class ISBN { 
private: 
char group[6];       
char publisher[8];      
char book[8];      
char check; 
char isbn[13]; 
char compute_check(); 

public: 
ISBN(); 
ISBN(char newisbn[]);    
ISBN(char group[ ], char publisher[ ], char book[ ], char check);          
bool valid();       
char *getpublisher();     
void print(ostream &o);     
}; 

ISBN::ISBN(char newisbn[]) : isbn(newisbn) {} 

Le programme charge ces numéros ISBN et puis imprime et les teste avec l'ISBN de classe de la façon suivante ...

strcpy(isbns[index++], "1-57676-074-X"); 
ISBN isbn(isbns[i]); 
isbn.print(cout); 
if (isbn.valid()) 

Je ne parviens pas à convertir les codes ISBN dans la classe ISBN afin qu'ils puissent être opérés par chacune de ces fonctions. Toute aide très appréciée! Merci!

+2

Quelle ligne dans le code vous donne l'erreur? –

Répondre

7

Ce:

ISBN::ISBN(char newisbn[]) : isbn(newisbn) {} 

ne fait pas ce que vous voulez. Malgré ce que l'on vous a dit, les tableaux ne sont pas identiques aux pointeurs - le constructeur prend ici un pointeur (déguisé en tableau) et essaie de l'utiliser pour initialiser un tableau réel. Vous avez besoin:

ISBN::ISBN(char newisbn[]) { 
    strcpy(isbn, newisbn); 
} 

Je suggère également étudier la classe std :: chaîne pour vos besoins généraux de traitement chaîne.

+0

Merci Neil, c'est exactement ce que j'avais besoin de savoir! – Spencer

2

ISBN::ISBN(char newisbn[]) : isbn(newisbn) {}

Vous ne pouvez pas initialiser char [13] par char *.

Vous devez copier manuellement, caractère par caractère:

ISBN::ISBN(char newisbn[]) { strcpy(isbn, newisbn); }

0

La façon simple pour stocker des chaînes dans C++ est vraiment seulement

const char* group = "Group"; 

Si vous avez besoin chaîne supplémentaire fonctionnalité regarder dans le string class.

+0

ce n'est pas très sûr, vous savez. Il est resereved dans la section de mémoire statique (corrigez-moi si je me trompe avec le nom) et chaque personne avec un éditeur hexadécimal peut voir la chaîne "Groupe". Ne fais pas ça. –

+0

@the_drow 1) 'group' pourrait être défini au moment de l'exécution. 2) Mais alors quoi? Ce n'est pas ce que «privé» signifie. –

+0

1) Non, il ne peut pas, c'est const. 2) Quel privé? cela n'a rien à voir avec OOP. –

0

En C/C++, vous pouvez traiter un tableau comme un simple pointeur vers le premier élément du tableau. Utilisez donc des pointeurs dans les paramètres de votre constructeur, pas dans les tableaux. Par exemple.

ISBN::ISBN(const char* newisbn) 
{ 
    strcpy(isbn, newisbn); 
} 
Questions connexes