почему предупреждающее устаревшее преобразование из строковой константы в 'char *' произошло в приведенной ниже программе

Я создал класс с именем person с публичной функцией fill_data, которая принимает два аргумента: массив char и int. Я передал такие аргументы fill_data("tushar",30); но там отображается предупреждение об устаревшем преобразовании из строковой константы в 'char *', но я не понимаю, почему, если кто-нибудь поможет мне узнать |

#include<iostream>
#include<cstring>
using namespace std;
class person
{
    char name[20];
    int age;
    public:
    void fill_data(char name2[],int age2)
    {
        strcpy(name,name2);
        age=age2;
    }
    void display_data(void)
    {
        cout<<name<<endl;
        cout<<age<<endl;
    }
};
int main()
{
    person p1;
    p1.fill_data("tushar",30);
    p1.display_data();

    return 0;
}

person play store    schedule 10.06.2019    source источник


Ответы (1)


Вы передали строковую константу "tushar" параметру функции char name2[], который не является константой. Поэтому для этого компилятору пришлось преобразовать строковую константу в char * (а не в const char *), что устарело.

Если fill_data не собирается изменять name2, параметр должен быть const. Если fill_data собирается изменить все, что передается в качестве параметра name2, не передавайте ему константу, например "tushar".

Примите решение и закодируйте одно или другое.

person David Schwartz    schedule 10.06.2019