函数调用错误中的参数过多

时间:2019-04-22 01:31:04

标签: c++ function

我正在创建类的对象,并编写了构造函数,并正在添加对象。我相信我对该函数有足够的变量,但是这表明我有太多的参数。我不明白为什么这么说。

我尝试重做我的构造函数和代码,但仍继续遇到相同的错误。我最终希望能够克隆对象,但是我也不知道该怎么做。

#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 个答案:

答案 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);
}