【发布时间】:2022-01-03 09:34:33
【问题描述】:
这个程序是一个 c++ 项目,使用谷仓和动物的类来创建一个动物谷仓。这些动物通过它们的名字、类型和重量来识别。在特定时间,动物会进食并增加体重。用户可以选择要经过多少天。大部分代码都已经写好了,现在是让 main 使用类函数的问题了。当我尝试在 main 中执行功能时,我收到错误代码“main.cpp:117:28: error: 'class Animal' has no member named 'display'” 相对于以下行:cout 显示() 这是代码。
// C++ program to create classes for Barn of Animals
#include <iostream>
#include <string>
#include <cstdlib>
#include <ctime>
#include <vector>
using namespace std;
int main()
{
//I need to run the program so a unit of time passes
//When the time runs, the time will be compared to
//the animals feeding time. When that feed time passes,
//The animal gains weight and the new weight is shown.
int choice;
cout << "1) Simulate Days" << endl;
cout << "2) Display Animals" << endl;
cout << "3) Exit" << endl;
cout << "Choose an option: \n";
cout << "Enter 1, 2 or 3: ";
cin >> choice;
switch (choice)
{
case 1:
cout << "Choice 1";
break; //Here we will run feedAnimal
case 2:
cout << "Choice 2";
break; //Here we will display all the animals
case 3:
cout << "Choice 3";
break; //Here we will exit the program
default:
cout << "Not 1, 2 or 3";
break;
}
}
// base Animal class
class Animal
{
private:
// data members
string type;
string name;
int weight;
public:
// constructor to initialize the members to specified values
Animal(string type, string name, int weight): type(type), name(name), weight(weight) {}
// getters
string getType()
{
return type;
}
string getName()
{
return name;
}
int getWeight()
{
return weight;
}
// setter for weight
void setWeight(int weight)
{
this->weight = weight;
}
};
// derived class Horse
class Horse: public Animal
{
public: Horse(string name, int weight): Animal("horse", name, weight) {}
};
// derived class Cow
class Cow: public Animal
{
public: Cow(string name, int weight): Animal("cow", name, weight) {}
};
// derived class Chicken
class Chicken: public Animal
{
public: Chicken(string name, int weight): Animal("chicken", name, weight) {}
};
class Barn
{
private:
vector<Animal*> barn;
public:
Barn();
void feedAnimal();
};
Barn::Barn()
{
srand(time(0)); // this will be srand not rand
Animal * a;
for (int i = 0; i < 5; i++)
{
a = new Horse("Artax" + to_string(i + 1), rand() % 200 + 1820); // end with semicolon not colon
barn.push_back(a);
a = new Cow("Fafnir" + to_string(i + 1), rand() % 250 + 1200); // convert (i+1) to string not (i+)
barn.push_back(a);
a = new Chicken("David" + to_string(i + 1), rand() % 2 + 15);
barn.push_back(a);
for (int i = 0; i < barn.size(); i++)
{
cout << barn[i]->display() << " " << " "; //This Displays all the animals
}
}
void Barn::feedAnimal()
{
int days; // = 0;
cout << "how many days:";
cin >> days;
for (int day = 0; day < days; day++)
{
for (int i = 1; i <= 12; i++)
{
string feed = to_string(i) + ":00"; // define the type for feed
cout << "The Time is " << feed << "\n";
if (i == 3) // time is 3:00, feed the chickens
{
// loop over the vector of Animals to feed the Chicken
for (size_t i = 0; i < barn.size(); i++)
{
if (barn[i]->getType() == "chicken") // this animal is chicken
barn[i]->setWeight(barn[i]->getWeight() + 1); // add 1 pound to its weight
cout << name << " " << type << " now weighs " << getweight() << " lbs";
}
}
else if (i == 5) // time is 5:00, feed the horses
{
// loop over the vector of Animals to feed the Horse
for (size_t i = 0; i < barn.size(); i++)
{
if (barn[i]->getType() == "horse") // this animal is horse
barn[i]->setWeight(barn[i]->getWeight() + 5); // add 5 pound to its weight
cout << name << " " << type << " now weighs " << getweight() << " lbs";
}
}
else if (i == 7) // time is 7:00, feed the cows
{
// loop over the vector of Animals to feed the Cow
for (size_t i = 0; i < barn.size(); i++)
{
if (barn[i]->getType() == "cow") // this animal is cow
barn[i]->setWeight(barn[i]->getWeight() + 5); // add 5 pound to its weight
cout << name << " " << type << " now weighs " << getweight() << " lbs";
}
}
}
}
}
}
【问题讨论】:
-
错误信息没有说谎。
class Animal中没有这个功能。另一个问题是你在 main 函数之后声明了所有这些类,所以如果你尝试在 main 中使用它们,那么你会因为编译器从未见过它们而出错。花一些时间正确缩进你的代码是值得的。在写的时候这样做。正如目前所写的,它基本上是不可读的。 -
考虑重载
operator<<(),而不是display函数。
标签: c++ pointers vector main cout