E0144 значение типа "const char *" нельзя использовать для инициализации сущности типа "char *"

Изучаю язык С++ не так давно, пытаюсь повторить пример, но он упорно не хочет воспроизводится.

class Singer : public Worker {
protected:
    enum { other, alto, contralto, soprano, bass, baritone, tenor };
    enum { Vtypes = 7 };
private:
    static char* pv[Vtypes];
    int voice;
public:
    Singer() :Worker(), voice(other) {};
    Singer(const std::string& s, long n, int v = other)
        : Worker(s, n), voice(v) {};
    Singer(const Worker& wk, int v = other)
        : Worker(wk), voice(v) {};
    void Set();
    void Show()const;
};

проблема заключается в определении метода, хотя это не совсем правильно назвать.

char* Singer::pv[] = { "other", "alto","contralto","soprano",
                "bass","baritone","tenor" };

выводит что в нём ошибка.


Ответы (2 шт):

Автор решения: Harry

Строковые литералы нельзя изменять, по сути они const char *. Если бы было можно инициализировать, как вы хотите - можно было бы изменять строковые литералы, типа, pv[0][3] = 'o';

Исправьте на

static const char* pv[Vtypes];
→ Ссылка
Автор решения: Antoniy274

Автор Стивен Прата с.749

Автор Стивен Прата с.750

Я просто повторял вслед за автором. Может это в новой редакции языка нельзя а в С++11 можно было?

→ Ссылка