Эта ошибка указателя Ни один экземпляр конструктора не соответствует списку аргументов

Пожалуйста, помогите ошибка: ни один экземпляр конструктора не соответствует списку аргументов. А также помогите объяснить, что такое "strcpy (this-> name, name);"

class Student {
    char name[50];
    char surname[50];
    int age;
public:
    Student(char name[], char surname[], int age) {
        strcpy(this->name, name); // please explain this line what does it means?
        strcpy(this->surname, surname);
        this->age = age;
    }
    void Show() {
        cout << "Name: " << this->name << endl;
        cout << "Surname: " << this->surname << endl;
        cout << "Age: " << this->age;
    }
};

int main() {
    Student A("Ivan", "Sidoroff", 25);
    A.Show();

    system("pause");
    return 0;
}

введите здесь описание изображения


person Rin Prak    schedule 23.10.2018    source источник
comment
related / dupe: stackoverflow.com/questions/2760500/   -  person NathanOliver    schedule 23.10.2018
comment
1) Код, который вы показываете, компилируется нормально. 2) Что делает strcpy, объясняется в документации strcpy.   -  person Algirdas Preidžius    schedule 23.10.2018
comment
@ AlgirdasPreidžius. Вам нужно включить предупреждения, тогда ISO C ++ 11 не позволяет преобразовать строковый литерал в 'char *'   -  person NathanOliver    schedule 23.10.2018
comment
@NathanOliver Я думал, что на C ++ 11 и более поздних версиях это ошибка, а не предупреждение, и, поскольку я скомпилировал с C ++ 14, я подумал, что если бы были такие ошибки, он не компилировался. : / Проклятье вам g ++ и ваши нестандартные расширения!   -  person Algirdas Preidžius    schedule 23.10.2018
comment
@ AlgirdasPreidžius Если это поможет, я всегда использую -Wall -pedantic при компиляции. Я также использую Wandbox или coliru, поскольку вы можете указать все параметры и увидеть все предупреждения.   -  person NathanOliver    schedule 23.10.2018
comment
-Wall -Wextra -Werror -pedantic ftw   -  person Lightness Races in Orbit    schedule 23.10.2018


Ответы (1)


Пожалуйста, помогите ошибка: ни один экземпляр конструктора не соответствует списку аргументов.

Вместо этого:

Student(char name[], char surname[], int age) {

Попробуй это:

Student(const char *name, const char *surname, int age) {

Он жалуется, потому что указатели char не соответствуют указателям на const char.

strcpy(this->name, name); // объясните, пожалуйста, эта строчка, что она означает?

Он копирует строку из name (переданный параметр) в другой name (который является частью class Student). Поскольку оба называются name, это неоднозначно. В этом случае name относится к параметру, а this->name вместо этого используется для ссылки на поле в class Student.

В более общем смысле this - это указатель на объект, вызывающий функцию.

person Blaze    schedule 23.10.2018
comment
Спасибо за ответ ... Я пробовал ваш код, он работает нормально, но, кроме того, его нужно изменить с strcpy на strcpy_s. это работает сейчас. - person Rin Prak; 23.10.2018
comment
спасибо за ваше объяснение по strcpy также ... во избежание двусмысленности, я помню урок моего учителя по использованию подчеркивания: _name (переданный параметр). - person Rin Prak; 23.10.2018