Конструктор не принимает символ * - PullRequest
0 голосов
/ 30 декабря 2018

Конструктор без параметров работает, а другой - нет.Я очень отчаялся, я попробовал все

// header

 class Etudiant
        {
        private:
            char * name;
            unsigned int age;
            Date *datenaissance;
        public:
            Etudiant();
            Etudiant(char * c,unsigned int,Date&);
            ~Etudiant();
        };

это мой .cpp

    Etudiant::Etudiant()
    {
        this->name = new char();
        strcpy(name, "kabil");
        this->age = 18;

    this->datenaissance = new Date();
}

Etudiant::Etudiant(char * c, unsigned int a, Date &d)
{
    this->name = new char();
    strcpy(this->name,c);
    this->age = a;
    this->datenaissance = new Date(d);
}


Etudiant::~Etudiant()
{
    delete[]name;
    name = 0;
}

это мойmain

int main()
{

    Date d();   
    Etudiant E(),E1("student",15,d);

    system("pause");

}

что мне изменить?

1 Ответ

0 голосов
/ 30 декабря 2018

Чтобы передать литеральную строку в функцию, она должна иметь параметр типа char const *, а не char *.Таким образом, ваш конструктор должен иметь этот прототип:

Etudiant(char const * c, unsigned int, Date &);

Говоря выше, вы также не выделяете достаточно памяти для копирования строки в вашем конструкторе.Эта строка:

this->name = new char();

должна быть:

this->name = new char[strlen(c) + 1];

, поэтому у вас достаточно памяти для этой операции копирования:

strcpy(this->name, c);
...