несовместимые типы в присваивании char? - PullRequest
1 голос
/ 03 февраля 2010

Я получаю ошибку с этим кодом. «Несовместимые типы при назначении char к char [13]». Я не могу понять, как инициализировать эти массивы и заставить это работать. По сути, программа берет коды ISBN (4 группы целых чисел и создает одну строку с символом «-» между каждой группой чисел) и проверяет их правильность. Программа использует класс ISBN и основную функцию, которая загружает фактические коды ISBN и пытается использовать класс ISBN для их проверки. Вот что у меня есть.

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) {}

Программа загружает эти номера ISBN, а затем печатает и тестирует их, используя класс ISBN следующим образом ...

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

У меня проблемы с преобразованием кодов ISBN в класс ISBN, чтобы они могли работать с каждой из этих функций. Любая помощь высоко ценится! Спасибо!

Ответы [ 4 ]

7 голосов
/ 03 февраля 2010

Это:

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

не делает то, что вы хотите. Несмотря на то, что вам, возможно, сказали, массивы не идентичны указателям - конструктор здесь берет указатель (замаскированный под массив) и пытается использовать его для инициализации реального массива. Вам нужно:

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

Я бы также предложил изучить класс std :: string для ваших общих потребностей в обработке строк.

2 голосов
/ 03 февраля 2010

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

Вы не можете инициализировать символ [13] символом *.

Вы должны вручную копировать, посимвольные символы:

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

0 голосов
/ 03 февраля 2010

В C / C ++ вы можете рассматривать массив как просто указатель на первый элемент массива.Поэтому используйте указатели в параметрах вашего конструктора, а не в массивах.Например,

ISBN::ISBN(const char* newisbn)
{
    strcpy(isbn, newisbn);
}
0 голосов
/ 03 февраля 2010

Простой способ хранить строки в C++ действительно только

const char* group = "Group";

Если вам нужна дополнительная строковая функциональность, загляните в класс строк .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...