Я дам несколько советов для вашего кода, и один (или более) из них, вероятно, решит проблемы, которые могут у вас возникнуть.
Во-первых, всегда старайтесь использовать конструктор списки инициализаторов когда возможно.Обычно, когда конструктор очевиден, как и ваш, использование такого списка тривиально.В этом случае вы можете просто сделать:
class Rider
{
string name;
int height;
public:
Rider(string name, int height) : name(name), height(height) {}
Rider(int height) : height(height) {}
};
и то же самое для остальных ваших тривиальных конструкторов.
Теперь, если вы присмотритесь к своему c'tor для Amusement_park
class, вы увидите, что вы пытаетесь получить доступ к индексу в vector
, который, скажем, еще не определен.То есть у вас есть пустой вектор, который должен содержать объекты типа Ride
, но, поскольку он пуст, попытка получить доступ к его содержимому (к любому индексу, который вы можете попытаться достичь) - это то, что мы называем неопределенное поведение .Это часть памяти, которую вы не знаете, что она содержит, и это потому, что вы никогда не сообщали своему компилятору, сколько там будет Ride
объектов, чтобы ваша программа могла правильно распределить память и инициализировать объекты для вас.Для того, чтобы вы на самом деле создали вектор соответствующего размера или, точнее, правильно изменили размер вектора, ваш Amusement_park
c'tor должен быть чем-то вроде
Amusement_park(int numRides)
{
all_rides.resize(numRides);
}
Ваша get_ride
функция внутриAmusement_park тоже не очень хорош.На самом деле, все ваше заявление a1.get_ride(1).add_line(r1)
не делает то, что вы собираетесь.Во-первых, функция get_ride()
возвращает vector
из Rider
, который не имеет функции-члена add_line()
.Вы действительно хотите, чтобы он возвращал объект Amusement_park
, который является единственным в вашем коде, который имеет такую функцию-член.Однако возвращать его нелогично, как вы можете видеть.
Короче говоря, ваш код содержит много недостатков, оба языка, как логически говоря.Следовательно, я рекомендую вам: 1) перепроверить логику вашего кода;2) Получить хорошую учебную книгу по C ++ для начала.
Удачи!