строка — C ++ несколько ошибок здесь

Кто-нибудь может мне с этим помочь? Я здесь новенький. Любая помощь приветствуется!

9.3.cpp: В конструкторе ‘Address :: Address (int, std :: string.int.std :: string, std :: String, std :: String)’:
9.3.cpp: 29: 51: ошибка: ‘this’ не может быть использована как функция

9.3.cpp: В функции-члене int Address :: compareTo (постоянный адрес&)»:
9.3.cpp: 39: 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(angel);
}
};

1

Решение

Эта строка:

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

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

Address(int houseNumber,
string street,
int apartmentNumber,
string city,
string state,
string zipCode)
: Address(houseNumber, street, city, state, zipCode)
{
this->apartmentNumber = apartmentNumber;
}

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

1

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

Вы не можете использовать this указатель таким образом

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

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

Другая ошибка должна быть решена, если вы #include<string> в верхней части заголовка.

0

Ваш код, по-видимому, не является C ++, скорее Java или C #: C ++ использует списки инициализаторов членов для делегирования конструкторов [sub-] объектам (а делегирование другому конструктору того же класса является новым в C ++. Использование списка member-initializer выглядит примерно так:

class foo
{
std::string d_val;
public:
foo(std::string const& val)
: d_val(val)
{
}
foo()
: foo("default") // C++ 2011 only
{
}
};
0
По вопросам рекламы [email protected]