我被赋予了主程序,并被告知创建一个程序来响应主程序,使用3个类。一个游乐园班,一个骑手班,和一个骑自行车班。我想把一个骑手添加到一个乘车向量中,并将这个向量存储在游乐园的向量中。我做错了什么?我怎么才能解决这个问题?
#include <iostream>
#include <string>
using namespace std;
class Rider
{
string name;
int height;
public:
Rider(string name, int height)
{
this->name=name;
this->height=height;
}
Rider(int height)
{
this->height=height;
}
};
class Ride
{
public:
vector <Rider> all_riders;
};
class Amusement_park
{
vector <Ride> all_rides;
public:
Amusement_park(int numRides)
{
all_rides[numRides];
}
vector <Rider> get_ride(int whichRide)
{
vector <Ride> the_ride= all_rides[whichRide];
return the_ride;
}
void add_line(class Rider)
{
the_ride.pushback(Rider);
}
};
int main()
{
Rider r1("Yaris",45); //name, height in inches
Rider r2(49); //height in inches
Amusement_park a1(3); //3 is the number of rides in the park
a1.get_ride(1).add_line(r1); //add a rider to the line of a ride
Amusement_park a2(2); //2 is the number of rides in the park
a2.get_ride(1).add_line(r2); //add a rider to the line of a ride
return 0;
}发布于 2019-09-25 17:00:30
我将为您的代码提供一些建议,其中一个(或多个)可能会解决您可能遇到的问题。
首先,尽可能尝试使用构造函数初始化程序列表。通常,当构造函数和您的构造函数一样明显时,使用这样的列表是非常简单的。在这种情况下,您可以这样做:
class Rider
{
string name;
int height;
public:
Rider(string name, int height) : name(name), height(height) {}
Rider(int height) : height(height) {}
};对于其他琐碎的构造函数也是如此。
现在,如果您仔细查看Amusement_park类的C‘’tor,您将看到您试图访问vector中尚未定义的索引。也就是说,您有一个空向量,它应该保存Ride类型的对象,但是由于它是空的,所以尝试访问它的内容(不管您可能试图达到什么索引)就是我们所说的未定义的行为。这是一个你不知道它包含什么的内存,因为你从来没有告诉你的编译器有多少Ride对象在里面,这样你的程序就可以在那里正确地分配内存和初始化对象。为了实际创建一个适当大小的向量,或者更准确地说,适当调整矢量的大小,您的Amusement_park c‘to应该如下所示
Amusement_park(int numRides)
{
all_rides.resize(numRides);
}您的get_ride函数在Amusement_park中也不是很好。实际上,你的全部声明a1.get_ride(1).add_line(r1)并没有做你想要做的事情。首先,get_ride()函数返回vector of Rider,它没有add_line()成员函数。实际上,您希望它返回一个Amusement_park对象,这是代码中唯一具有这样一个成员函数的对象。但是,正如您可能看到的那样,返回它是不符合逻辑的。
简而言之,您的代码包含许多缺陷,这两种语言在逻辑上都是如此。因此,我建议您: 1)反复检查代码的逻辑;2)开始编写一本关于C++的教程。
祝好运!
发布于 2019-09-25 16:40:16
在您的函数add_line(class Rider)中,没有引用the_ride来推动骑手。您可以将从vector<Rider>获得的get_ride(int whichRide)传递给函数,也可以将get_ride和add_line组合成如下所示的一个函数:
void add_rider_to_line(int whichRide, class Rider)
{
all_rides[whichRide].push_back(Rider);
}https://stackoverflow.com/questions/58102907
复制相似问题