首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在另一个类中调用类型类的向量?

如何在另一个类中调用类型类的向量?
EN

Stack Overflow用户
提问于 2019-09-25 16:34:01
回答 2查看 477关注 0票数 0

我被赋予了主程序,并被告知创建一个程序来响应主程序,使用3个类。一个游乐园班,一个骑手班,和一个骑自行车班。我想把一个骑手添加到一个乘车向量中,并将这个向量存储在游乐园的向量中。我做错了什么?我怎么才能解决这个问题?

代码语言:javascript
复制
#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;
}
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-09-25 17:00:30

我将为您的代码提供一些建议,其中一个(或多个)可能会解决您可能遇到的问题。

首先,尽可能尝试使用构造函数初始化程序列表。通常,当构造函数和您的构造函数一样明显时,使用这样的列表是非常简单的。在这种情况下,您可以这样做:

代码语言:javascript
复制
    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应该如下所示

代码语言:javascript
复制
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++的教程。

祝好运!

票数 0
EN

Stack Overflow用户

发布于 2019-09-25 16:40:16

在您的函数add_line(class Rider)中,没有引用the_ride来推动骑手。您可以将从vector<Rider>获得的get_ride(int whichRide)传递给函数,也可以将get_ride和add_line组合成如下所示的一个函数:

代码语言:javascript
复制
void add_rider_to_line(int whichRide, class Rider)
{
    all_rides[whichRide].push_back(Rider);
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58102907

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档