Конструктор не может быть повторно объявлен

#c #constructor

#c #конструктор

Вопрос:

Я практикую перегрузки конструктора. Я узнал, что конструктор может быть перегружен несколько раз, но когда я пытаюсь, он говорит: «Конструктор не может быть повторно объявлен». В чем может быть проблема? Если я удаляю один из конструкторов, он запускается. Должен ли я добавить деструктор или что мне делать?

 #include <iostream>
#include <sstream>

using namespace std;

class Cat
{
private:
    string name;
    string breed;
    int age;
    int weight;

public:
    Cat(string newName, string newBreed, int newAge, int newWeight)
    {
        name = newName;
        breed = newBreed;
        age = newAge;
        weight = newWeight;
    }

    Cat(string nName, string nBreed, int nAge, int nWeight)
    {
        name = nName;
        breed = nBreed;
        age = nAge;
        weight = nWeight;
    }

    string toString()
    {
        stringstream ss;
        ss << "Name - ";
        ss << name << endl;
        ss << "Breed - ";
        ss << breed << endl;
        ss << "Age - ";
        ss << age << endl;
        ss << "Weight - ";
        ss << weight << endl;

        cout << ss.str() << endl;

        return ss.str();
    }
};

int main()
{
    Cat a("Illidan", "Maine-Coon", 2, 12);
    a.toString();

    Cat b("Sammy", "Turkish Angora", 2, 8);
    b.toString();
}
 

Комментарии:

1. Имя параметров не имеет значения. Оба ваших конструктора имеют подпись Cat(string, string, int, int) . Вы не можете этого сделать.

2. Они могут быть перегружены , что означает, что у вас может быть несколько конструкторов с разными сигнатурами. У ваших такая же подпись.

3. О, теперь я понимаю. спасибо 🙂

4. Что ж, спросите себя, чего вы ожидали от дублирующего конструктора, чего не было в первом конструкторе. Если это разные имена, то вам нужно было бы написать тысячи конструкторов, если не миллионы из них, только потому, что имя параметров изменилось. И ты же знаешь, что это не имеет смысла, верно?