Anti-Antidote Ответов: 1

[C++] проблемы с оператором switch()


Я пытаюсь создать меню с помощью switch(). Однако компилятор продолжает выбрасывать мне такие ошибки, как invalid conversion of 'const char*' to 'char' [-fpermissive]. Вот код:
void info::get_factorio_version(string* factorio_version){
    bool loop = true;
    while(loop){
    cout << "What version of Factorio is this mod for?" << endl;
    cout << "   1 - 0.14.xx" << endl;
    cout << "   2 - 0.13.xx" << endl;
    cout << "   3 - 0.12.xx or earlier" << endl;
    cout << "Your selection: ";
    int select; cin >> select;
    switch(select){
        case '1': {
            *factorio_version = "0.14";
            cout << "\n\n";
            loop = false;
            } break;
        case '2': {
            *factorio_version = "0.13";
            cout << "\n\n";
            loop = false;
            } break;
        case '3': {
            *factorio_version = "NULL";
            cout << "\n\n";
            loop = false;
            } break;
        default: {
            cout << "\n\nInvalid response.\n\n";
            } break;}}}

Есть ли какие-то проблемы с моим кодом?

Что я уже пробовал:

Я пробовал использовать:
string selectSTR; cin >> stringSTR;
int selectINT = atoi(selectSTR);

Так же как:
string selectSTR; cin >> stringSTR;
char selectCHAR = selectSTR.c_str();

1 Ответов

Рейтинг:
1

Richard MacCutchan

Вы объявили select как int, но ваш case операторы используют символьные константы. они должны быть такими:

switch(select){
    case 1:
        *factorio_version = "0.14";

Также вам не нужны разделители блоков ({ и }) окружающий ваш код обращения.


Anti-Antidote

Как бы я заявил select как char const* Кроме того, я заключил код случая в скобки, чтобы ничего не ускользнуло (лучше перестраховаться, чем потом сожалеть).

Richard MacCutchan

Вам придется объявить источник как массив символов. Но зачем вам это делать, ведь это ни к чему не приведет?

Anti-Antidote

О, Извините, я неправильно понял ответ, но теперь я знаю. Спасибо!

jeron1

"Как бы я объявил select как char const*?"
Вы бы этого не сделали, взгляните поближе на заявление по делу в "Ричардс пост". Если у вас все еще есть проблемы с компиляцией, возможно, обновите свой пост, чтобы добавить ошибку в строку, в которой она возникает.

"что-нибудь от побега", что вы имеете в виду?

Anti-Antidote

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

jeron1

Утечка подразумевает что-то конкретное (выделение памяти и не освобождение этой памяти, когда вы закончите с ней), не имеющее ничего общего с самим оператором switch-case.

Richard MacCutchan

Сказал кто-то, кто не знает, о чем они говорят. Скобки не имеют никакого значения, это код внутри, который вызывает проблему.