C ++ const ", и объект имеет спецификаторы типа, которые не совместимы с членом - PullRequest
0 голосов
/ 08 ноября 2018

Я новичок в программировании на C ++, и в моем классе OPP нас попросили создать телефонную книгу.

Теперь, в лекции профессор сказал кое-что о том, что если вы хотите убедиться, что ваша переменная, которая вводится в метод, не изменяется, вы должны поместить в нее const.

вот мой код.

private:
 static int phoneCount;
 char* name;
 char* family;
 int phone;
 Phone* nextPhone;

public:
    int compare(const Phone&other) const;
    const char* getFamily();
    const char* getName();

и в Phone.cpp

int Phone::compare(const Phone & other) const
{
 int result = 0;
 result = strcmp(this->family, other.getFamily());
 if (result == 0) {
    result = strcmp(this->name, other.getName);
 }
 return 0;
}

Я продолжаю получать "объект имеет спецификаторы типа, которые не совместимы с членом" когда я пытаюсь вызвать strcmp внутри моей функции сравнения. Я знаю, что могу просто удалить const в объявлении функции, и он исчезнет, ​​но я все еще не понимаю, почему он отображается в первую очередь.

Помощь будет принята с благодарностью.

Ответы [ 3 ]

0 голосов
/ 08 ноября 2018

Ваша подпись

int Phone::compare(const Phone & other) const

означает, что внутри этой функции вам нужно убедиться, что вы не изменили экземпляр Phone.

В данный момент ваша функция вызывает const char* getFamily()getName, по которому вы пропустили вызов ()).Ни одна из этих функций не является const, следовательно, ошибка.

Если вы также отметите их как const, все будет в порядке.

0 голосов
/ 08 ноября 2018

В дополнение к другим ответам, которые правильно предлагают const квалификацию ваших получателей, вы можете получить доступ к элементам данных other напрямую, избегая этих вызовов.

int Phone::compare(const Phone & other) const
{
 int result = strcmp(family, other.family);
 if (result == 0) {
    result = strcmp(name, other.name);
 }
 return result;
}
0 голосов
/ 08 ноября 2018

Вам нужно добавить const квалификатор для геттеров const char* getFamily() const;.Таким образом, эти геттеры могут быть вызваны для объектов типа const Phone &, которые вы передаете в функцию.

Также other.getName должно быть other.getName().

...