如何解决C ++矢量元素似乎在for循环结束后消失
我对C ++非常陌生(甚至比OOP还要新),并且我正在做我的第一个项目,该项目不在一个.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 举报,一经查实,本站将立刻删除。