#c #function
#c #функция
Вопрос:
Я работаю над созданием объекта класса, написал конструктор и работаю над добавлением объекта. Я считаю, что у меня достаточно переменных для функции, но это говорит о том, что у меня слишком много аргументов. Я не понимаю, почему он так говорит.
Я попытался переделать свой конструктор и код, но продолжаю сталкиваться с той же ошибкой. В конечном итоге я хочу иметь возможность клонировать объект, но я не уверен, как это сделать.
#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);
}
Ответ №1:
Animal newAnimal();
это объявление функции, а не объявление переменной (из-за «самого неприятного синтаксического анализа»). Таким образом, вызывающий newAnimal(uName, uSize, uColor, uLegs);
пытается вызвать функцию с 0 параметрами с 4 значениями, отсюда и ошибка.
Даже если вы исправили это объявление (удалив скобки), ваш код все равно не сможет скомпилироваться, поскольку newAnimal(uName, uSize, uColor, uLegs);
тогда он будет пытаться вызвать operator()
newAnimal
объект, но ваш класс не реализует operator()
.
Чтобы вызвать конструктор вашего класса, вам нужно изменить main()
его на this вместо этого:
int main() {
string uName = "Bear";
string uSize = "Large";
string uColor = "Black";
int uLegs = 4;
Animal newAnimal(uName, uSize, uColor, uLegs);
}