В C исторически строковые литералы имеют типы непостоянных массивов символов. И до C ++ 11 Standard компиляторы C ++ позволяли использовать строковые литералы в качестве аргументов параметров непостоянного типа char *
для обратной совместимости.
Однако, хотя в C строковые литералы имеют непостоянные массивы символов, тем не менее вы не может их изменять.
В C ++ 11 было решено не разрешать использование строковых литералов с типом char *
, потому что в C ++ они имеют типы постоянных массивов символов.
Итак, объявите конструктор, например
Student( const char *pName )
В любом случае это лучше, потому что это объявление говорит читателю класса, что переданная строка не будет изменена в конструкторе, даже если аргумент не будет строковым литералом.