我正在创建类的对象,并编写了构造函数,并正在添加对象。我相信我对该函数有足够的变量,但是这表明我有太多的参数。我不明白为什么这么说。
我尝试重做我的构造函数和代码,但仍继续遇到相同的错误。我最终希望能够克隆对象,但是我也不知道该怎么做。
#include "pch.h"
#include <iostream>
#include <string>
using namespace std;
class Animal {
public:
Animal() {};
Animal(string uAName, string uASize, string uAColor, int uANumLegs)
: aName(uAName), aSize(uASize), aColor(uAColor), numLegs(uANumLegs) {};
void printAnimal(Animal) {
cout << "Your animal is: " << aName << endl;
cout << "The animal size is: " << aSize << endl;
cout << "The animal Color is: " << aColor << endl;
cout << "The animal has " << numLegs << " legs" << endl;
}
virtual Animal* clone() { return (new Animal(*this)); }
void aClone(Animal* nAnimal) {
Animal* cal = nAnimal->clone();
}
private:
string aName = "";
string aSize= "";
string aColor = "";
int numLegs = 0;
};
int main()
{
Animal newAnimal();
string uName = "Bear";
string uSize = "Large";
string uColor = "Black";
int uLegs = 4;
newAnimal(uName, uSize, uColor, uLegs);
}
答案 0 :(得分:3)
Animal newAnimal();
是函数声明,而不是变量声明(由于"most vexing parse")。因此,调用newAnimal(uName, uSize, uColor, uLegs);
试图调用具有4个值的0参数函数,因此会出错。
即使您修复了该声明(通过删除括号),您的代码仍将无法编译,因为newAnimal(uName, uSize, uColor, uLegs);
会尝试在operator()
对象上调用newAnimal
,但您的课程未实现operator()
。
要调用您的类构造函数,您需要将main()
更改为此:
int main() {
string uName = "Bear";
string uSize = "Large";
string uColor = "Black";
int uLegs = 4;
Animal newAnimal(uName, uSize, uColor, uLegs);
}