invalid conversion from ‘const char’ to ‘char’

Есть такое определение (расположено вне функций):

struct {
    const char* completion = "----TEST COMPLETED----",
    speed = "Average typing speed",
    speed_mod = "wpm",
    accuracy = "Average accuracy",
    work_harder = "Work harder for your accuracy!",
    not_bad = "Not bad, but you can get it with better accuracy!",
    excellent = "Excellent! Now, you can try to work with your speed.",
    question_records = "Do you want to save your records?",
    yes = "Yes",
    no = "No",
    question_name = "Enter your name",
    players_records = "----RECORDS----",
    bye = "Goodbye!";
} messages;

Компилятор здесь выдает error: invalid conversion from ‘const char’ to ‘char', указывая на каждый литерал. Мне непонятно, что он имеет ввиду. В чем некорректен этот код?


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

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

В С/С++ при объявлении указателя * относится не к типу, а к переменной, т.е. type * a рассматривается как type (*a), а не (type*) a, а потому эту звездочку надо указывать у каждого члена:

struct {
    const char* completion = "----TEST COMPLETED----",
    *speed = "Average typing speed",
    *speed_mod = "wpm",
    ....
} messages;

Или объявить тип с помощью typedef или using и использовать его, например:

struct {
    using ccptr = const char*; // Или typedef const char* ccptr;
    ccptr completion = "----TEST COMPLETED----",
    speed = "Average typing speed",
    speed_mod = "wpm",
    ....
} messages;
→ Ссылка