C++ запрещает преобразование строковой константы в символ [закрыто]

Вопрос или проблема

Я настроил vscode для проекта igraphics по инструкции https://drive.google.com/file/d/1YLd8IN4to4sLFFt5VzU7XF1eq3nGs-LW/view?usp=sharing в этом PDF. Но мой код не работает. Выдает эти ошибки:
1 и 2
какая может быть решением?
Вот код:

# include "iGraphics.h"

int x = 300, y = 300, r = 20;
/*
    функция iDraw() вызывается снова и снова системой.

    */

void iDraw() {
    //вставьте сюда ваш код рисования
    iClear();
    iSetColor(20, 200, 200);
    iFilledCircle(x, y, r);
    //iFilledRectangle(10, 30, 20, 20);
    iSetColor(20, 200, 0);
    iText(40, 40, "Привет, я iGraphics");
}

/*
    функция iMouseMove() вызывается, когда пользователь нажимает и перетаскивает мышь.
    (mx, my) - это позиция указателя мыши.
    */
void iMouseMove(int mx, int my) {
    printf("x = %d, y= %d\n",mx,my);
    //вставьте сюда ваш код
}

/*
    функция iMouse() вызывается, когда пользователь нажимает/отпускает мышь.
    (mx, my) - это позиция указателя мыши.
    */
void iMouse(int button, int state, int mx, int my) {
    if (button == GLUT_LEFT_BUTTON && state == GLUT_DOWN) {
        //вставьте сюда ваш код
        //  printf("x = %d, y= %d\n",mx,my);
        x += 10;
        y += 10;
    }
    if (button == GLUT_RIGHT_BUTTON && state == GLUT_DOWN) {
        //вставьте сюда ваш код
        x -= 10;
        y -= 10;
    }
}

/*
    функция iKeyboard() вызывается каждый раз, когда пользователь нажимает клавишу на клавиатуре.
    key - содержит ASCII значение нажатой клавиши.
    */
void iKeyboard(unsigned char key) {
    if (key == 'q') {
        exit(0);
    }
    //вставьте сюда ваш код для других клавиш
}

/*
    функция iSpecialKeyboard() вызывается, когда пользователь нажимает специальные клавиши, такие как-
    функциональные клавиши, home, end, pg up, pg down, стрелки и т.д. вам нужно использовать
    соответствующие константы для их определения. Список:
    GLUT_KEY_F1, GLUT_KEY_F2, GLUT_KEY_F3, GLUT_KEY_F4, GLUT_KEY_F5, GLUT_KEY_F6,
    GLUT_KEY_F7, GLUT_KEY_F8, GLUT_KEY_F9, GLUT_KEY_F10, GLUT_KEY_F11, GLUT_KEY_F12,
    GLUT_KEY_LEFT, GLUT_KEY_UP, GLUT_KEY_RIGHT, GLUT_KEY_DOWN, GLUT_KEY_PAGE UP,
    GLUT_KEY_PAGE DOWN, GLUT_KEY_HOME, GLUT_KEY_END, GLUT_KEY_INSERT
    */
void iSpecialKeyboard(unsigned char key) {
    if (key == GLUT_KEY_END) {
        exit(0);
    }
    //вставьте сюда ваш код для других клавиш
}

int main() {
    //вставьте сюда свои собственные коды инициализации.
    iInitialize(400, 400, "демо");
    return 0;
}

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

Ответ или решение

Ошибка "C++ forbids converting a string constant to char" чаще всего возникает из-за того, что строковые литералы в C++ рассматриваются как константные массивы символов. Ваша проблема, скорее всего, связана с использованием функции iText() в строке:

iText(40, 40, "Hi, I am iGraphics");

Убедитесь, что определение функции iText() в заголовочном файле iGraphics.h принимает аргументом const char*, а не char*:

void iText(int x, int y, const char* string);

Если функция принимает char*, это может привести к ошибке, поскольку строковые литералы нельзя менять. Чтобы избежать этой проблемы, убедитесь, что параметр функции принимает const char*.

В дополнение к этому, есть еще несколько моментов, на которые стоит обратить внимание, чтобы убедиться, что ваш код компилируется и работает правильно:

  1. Проверка правильности установки библиотеки iGraphics: Убедитесь, что все файлы библиотеки корректно подключены к проекту. Возможно, некоторые файлы отсутствуют или неправильно настроены в пути.

  2. Использование правильного компилятора: Убедитесь, что вы используете совместимый компилятор с iGraphics, так как некоторые компиляторы могут не поддерживать специфические функции библиотеки.

  3. Проверка функций и их сигнатур: Убедитесь, что все функции вызываются с правильными параметрами. Например, функция iSetColor() принимает RGB значения, и если вы случайно передадите значения вне диапазона от 0 до 255, это может привести к ошибкам.

  4. Проблемы с кодом: В строке, где происходит обработка нажатия мыши:

if (button == GLUT_LEFT_BUTTON && state == GLUT_DOWN) {

Замените && на &&. Правильный вариант:

if (button == GLUT_LEFT_BUTTON && state == GLUT_DOWN) {
  1. Дебаггинг ошибок: Возможно, полезно добавить дополнительные printf или cout для отладки, чтобы отслеживать, выполняются ли определенные участки кода.

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

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

Оцените материал
Добавить комментарий

Капча загружается...