C ++矢量元素似乎在for循环结束后消失

问题描述

我对C ++非常陌生(甚至比OOP还要新),并且我正在做我的第一个项目,该项目不在一个.cpp文件中。我遇到了一个看似简单的问题,我的矢量数据似乎正在消失。

main.cpp主要功能内的代码块:

 vector<Horse> HorseStable(horseAmount); // creating an vector of horse objects based on user input horseAmount



    for (int i = 0; i < horseAmount; i++) // sets name for each horse and rider
    {
        string nameString = "";
        string riderString = "";

        cout << "Enter name for horse #" << (i + 1) << ": ";
        cin >> nameString;
        HorseStable[i].setName(nameString);

        cout << "Enter name for rider of " << nameString << ": ";
        cin >> riderString;
        HorseStable[i].setRider(riderString);
        system("cls");
    }

    HorseStable[0].printName(); // a test to see if the horse name stayed inside the vector (it did not)

整个Horse.h文件

#pragma once
#include <iostream>
#include <string>
#include <stdlib.h>
#include <time.h>

class Horse
{
    private:
        std::string name;
        std::string rider;
    public:
// these three ints were supposed to be private,but I Couldn't access
// maxRunningdistPerSecond as a displayHorse() function parameter from main
// maybe figuring out my first issue will help with this,as I was attempting
// HorseStable[0].displayHorse(maxRunningdistPerSecond)
        int maxRunningdistPerSecond;
        int distanceTraveled;
        int racesWon;
        Horse() // default constructor
        {
            std::string name = " ";
            std::string rider = " ";
            int maxRunningdistPerSecond = 100;
            int distanceTraveled = 0;
            int racesWon = 0;
        };

        int runASecond(int,int);
        int sendToGate(int);
        void displayHorse(int);
        std::string setName(std::string); // sets the horse name based on user input from main.cpp variable
        std::string printName(); // simply prints the horse name,I don't believe my issue is here
        std::string setRider(std::string);
        std::string printRider();

};

Horse.cpp中的代码块:

std::string Horse::setName(std::string nameString) // takes user input for horse name
{
    Horse::name = nameString;
    return std::string(nameString);
}

std::string Horse::printName() // prints the horse's name
{
    return std::string(name);
}

setName()和getName()在main.cpp中的for循环中可以完美地工作,但是当循环结束后我尝试使用它们时,所有数据似乎都消失了。我已经花了几个小时寻找解决方案,但是在无济于事之后,不得不恢复到这个稳定的版本。我对指针和按引用传递不是很好,但是这些似乎是唯一可行的方法。我是否可能使用了错误的指针?我是否应该创建Horse指针的向量,而不是实际的Horse对象的向量?

我的另一个问题: 如果您在Horse.h中注意到我的公共成员本应是私有的,那么当main作为main中调用函数的参数作为私有参数时,我将无法访问它们。这很有道理,因为我在main中的函数调用如下所示:

HorseStable[0].displayHorse(distanceTraveled)

我不确定如何在Horse类中引用向量的每个元素,这似乎是private可以到达distanceTraveled的唯一方法。我的教授希望所讨论的变量是私有的,这使它成为一个问题。用户定义了Horse对象的数量,这意味着我不能只声明几个命名为Horses的对象,而只是将它们显示为Horse(distanceTraveled)。

Horse.cpp中的函数声明:

void Horse::displayHorse(int distanceTraveled) // attempts to show a graphic of the race progress
{
    if (distanceTraveled >= 50)
    {
        std::cout << "|->                   |" << "   " << name << ",ridden by " << rider;
    }

    else if (distanceTraveled >= 100)
    {
        std::cout << "|-->                  |" << "   " << name << ",ridden by " << rider;
    }

    else if (distanceTraveled >= 150)
    {
        std::cout << "|--->                 |" << "   " << name << ",ridden by " << rider;
    } // this goes on up to 1000,but this is all that's necessary for posting

如果格式不符合标准,我深表歉意,但这项工作确实使我感到压力很大。我一直都在理解所有新材料,但是看起来指针和引用总是使我的作业无法使用。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)