这个程序是一个c++项目,使用谷仓和动物的类创建一个动物谷仓。这些动物是通过它们的名字、类型和体重来识别的。在特定的时间,动物会进食并增加体重。用户可以选择要经过的天数。大部分代码已经写好了,现在是让main来处理类函数的问题了。当我尝试在main中执行函数时,我得到了错误代码"main.cpp:117:28: error:‘class Animal’没有名为‘display’的成员“,这一行声明: cout << barni->display()这里是代码。
// 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";
}
}
}
}
}
}发布于 2021-11-25 04:09:45
下面是operator <<重载的方式,而不是编写一个完全独立的函数:
#include <iostream>
class MyClass {
int i = 0;
public:
MyClass() : i(4) { }
friend std::ostream& operator<<(std::ostream& out, MyClass obj) {
out << obj.i;
return out;
}
};
int main() {
MyClass myClass;
std::cout << myClass;
return 0;
}发布于 2021-11-25 08:35:54
在类Animal中,您可以只实现返回字符串的display()方法,更改后一切都会正常工作:
std::string display() const {
std::stringstream ss;
ss << "type: " << type << ", name: " << name
<< ", weights: " << weight << std::endl;
return ss.str();
}下面是完全更正的代码。我还必须修复一些拼写错误,以使代码可编译:
// C++ program to create classes for Barn of Animals
#include <iostream>
#include <string>
#include <cstdlib>
#include <ctime>
#include <vector>
#include <sstream>
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;
}
std::string display() const {
std::stringstream ss;
ss << "type: " << type << ", name: " << name
<< ", weights: " << weight << std::endl;
return ss.str();
}
};
// 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";
cout << barn[i]->display();
}
}
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";
cout << barn[i]->display();
}
}
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";
cout << barn[i]->display();
}
}
}
}
}发布于 2021-11-26 04:19:40
好的,这就是我是如何让它工作的。谢谢你的帮助,真的帮了我大忙。
//Fixed Practice code
#include <iostream>
#include <string>
#include <cstdlib>
#include <ctime>
#include <vector>
using namespace std;
// 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)
Animal(string type, string name, int weight) {
//Added code to called the setters
setWeight(weight);
setName(name);
setType(type);
}
// getters
string getType() { return type; }
string getName() { return name; }
int getWeight() { return weight; }
//Added setter for type
void setType(string type) { this->type = type; }
//Added setter for name
void setName(string name) { this->name = name; }
// setter for weight
void setWeight(int weight) { this->weight = weight; }
//Added the display method in the Animal class to display the animal details
string display() {
string printLine = "";
printLine = "\nAnimal Type: " + this->getType() + ", Animal Name: " + this->getName() + ", Animal Weight: " + to_string(this->getWeight());
return printLine;
}
};
// 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();
void display();
};
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);
}
}
//Added the display code here, moved the code from inside the Barn constructor
void Barn::display() {
for (int i = 0; i < barn.size(); i++) {
cout << barn[i]->display() << " " << " "; //This Displays all the animals
}
}
void Barn::feedAnimal() {
int days;// = 0;
string feed;
cout << "\nhow many days:";
cin >> days;
//Added the code here - Sort of modifications
//We are looping the vector once, check the time and animal increase the weight, the prior code was looping the vector multiple times for a day and time
for (int day = 0; day < days;day++) {
for (int feedtime = 1; feedtime <= 12; feedtime++) {
feed = to_string(feedtime) + ":00"; // define the type for feed
cout << "\nThe Time is " << feed << "\n";
for (int barnNum = 0; barnNum < barn.size();barnNum++) {
if ((feedtime == 3) && (barn[barnNum]->getType() == "chicken")) {
barn[barnNum]->setWeight(barn[barnNum]->getWeight() + 1); // add 1 pound to its weight
cout << "\n" << barn[barnNum]->getName() << " " << barn[barnNum]->getType() << " now weighs " << barn[barnNum]->getWeight() << " lbs";
}
if ((feedtime == 5) && (barn[barnNum]->getType() == "horse")) {
barn[barnNum]->setWeight(barn[barnNum]->getWeight() + 5); // add 5 pound to its weight
cout << "\n" << barn[barnNum]->getName() << " " << barn[barnNum]->getType() << " now weighs " << barn[barnNum]->getWeight() << " lbs";
}
if ((feedtime == 7) && (barn[barnNum]->getType() == "cow")) {
barn[barnNum]->setWeight(barn[barnNum]->getWeight() + 5); // add 5 pound to its weight
cout << "\n" << barn[barnNum]->getName() << " " << barn[barnNum]->getType() << " now weighs " << barn[barnNum]->getWeight() << " lbs";
}
}
}
}
}
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;
//Added code to create a Barn object
Barn myBarn;
cout << "Choose an option: \n";
cout << "Enter 1, 2 or 3: ";
cin >> choice;
switch (choice)
{
case 1:
cout << "\nChoice 1"; //Here we will run feedAnimal
//Call the feedAnimal() method
myBarn.feedAnimal();
break;
case 2:
cout << "\nChoice 2";
//Call the display() method
myBarn.display();
break;//Here we will display all the animals
case 3:
cout << "\nChoice 3"; break;//Here we will exit the program
default:
cout << "\nNot 1, 2 or 3"; break;
}
}https://stackoverflow.com/questions/70105503
复制相似问题