Слишком много аргументов в ошибке вызова функции

#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);
}