Ошибки нуждаются в руководстве

Нужна помощь, пожалуйста, помогите мне в этом.
Как устранить ошибки, как указано ниже?

  • 30: 24: ошибка: ожидается «)» до «,» токен

  • В функции-члене ‘int Address :: compareTo (const Address)&) ‘:

  • 41: 26: ошибка: «std :: string» не имеет члена с именем «CompareTo»

    #include<iostream>
using namespace std;

class Address {
int    houseNumber;
string street;
int    apartmentNumber;
string city;
string state;
string zipCode; // e.g., "47405-1234"Address(int houseNumber,
string street,
// no apartmentNumber
string city,
string state,
string zipCode) {
this->houseNumber = houseNumber;
this->street = street;
this->city = city;
this->state = state;
this->zipCode = zipCode;
}
Address(int houseNumber,
string street,
int apartmentNumber,
string city,
string state,
string zipCode) {
this(houseNumber, street, city, state, zipCode);
this->apartmentNumber = apartmentNumber;
}
void print(void) {
std::cout << "Street: " << street << "\nCity: "<< city << "\nState: " << state << "\nPostal Code: " << zipCode;
}

int compareTo(const Address &a) {
// same conventions as for Strings
return this->zipCode.compareTo(a);
}
};

-1

Решение

Функция, которую вы ищете compare, не compareTo (Java, C # любой)?

Также обратите внимание, что angle не объявлено в вашей области. Ты имел ввиду:

return this->zipCode.compare("angel");

или вы просто пропустили переменную?

Вы также («следует», где это применимо):

  • не нужно this->
  • в качестве альтернативы compare ты можешь использовать == (это возвращает true для равенства)
  • print а также compareTo должен быть помечен как const
  • использовать списки инициализаторов членов в конструкторах
  • удалить using namespace std; из шапки
  • отделить реализации в исходных файлах
  • использовать включить охранники для заголовков
  • правильный отступ
  • проходить string Параметры для конструктора const &
2

Другие решения

30: 24: ошибка: ожидается «)» до «,» токен

У тебя есть

this(houseNumber, street, city, state, zipCode);

это ерунда; this это указатель на конструируемый объект, а не функция.

Предположительно, вы пытаетесь вызвать другой конструктор для инициализации некоторых элементов данных. В C ++ 11 вы можете делегировать другому конструктору, хотя я не знаю, поддерживают ли это еще какие-либо компиляторы. Это должно быть сделано в списке инициализатора, а не в теле конструктора:

Address(/*args*/) : Address(/*other args*/), apartmentNumber(apartmentNumber) {}

Если это не сработает, вам придется либо дублировать инициализации в обоих конструкторах, либо переместить их в функцию-член и вызвать ее из обоих конструкторов.

Вы можете также рассмотреть вопрос об исключении конструкторов и использовании вместо этого инициализации агрегата:

Address address = {
123, "Fake Street", /* and so on */
};

хотя вы должны делать это только для классов, которые просто содержат данные без инвариантов классов для установки.

41: 26: ошибка: «std :: string» не имеет члена с именем «CompareTo»

Как говорит ошибка, нет compareTo член в std::string, Тем не менее, есть член под названием compare, Предполагая, что ваш комментарий подразумевает, что вы хотите того же поведения, что и Java String.compareToтогда это то, что вы хотите.

Тем не менее, в C ++ гораздо чаще делать объекты сопоставимыми, переопределяя операторы сравнения (==, <, так далее.); это сделает его более удобным для использования со стандартными алгоритмами и другим кодом, использующим подобные идиомы. Возможно, вы захотите подумать о таких вещах, а не пытаться использовать идиомы из других языков.

1

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector