Вопрос или проблема
Я настроил 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*
.
В дополнение к этому, есть еще несколько моментов, на которые стоит обратить внимание, чтобы убедиться, что ваш код компилируется и работает правильно:
-
Проверка правильности установки библиотеки iGraphics: Убедитесь, что все файлы библиотеки корректно подключены к проекту. Возможно, некоторые файлы отсутствуют или неправильно настроены в пути.
-
Использование правильного компилятора: Убедитесь, что вы используете совместимый компилятор с iGraphics, так как некоторые компиляторы могут не поддерживать специфические функции библиотеки.
-
Проверка функций и их сигнатур: Убедитесь, что все функции вызываются с правильными параметрами. Например, функция
iSetColor()
принимает RGB значения, и если вы случайно передадите значения вне диапазона от 0 до 255, это может привести к ошибкам. -
Проблемы с кодом: В строке, где происходит обработка нажатия мыши:
if (button == GLUT_LEFT_BUTTON && state == GLUT_DOWN) {
Замените &&
на &&
. Правильный вариант:
if (button == GLUT_LEFT_BUTTON && state == GLUT_DOWN) {
- Дебаггинг ошибок: Возможно, полезно добавить дополнительные
printf
илиcout
для отладки, чтобы отслеживать, выполняются ли определенные участки кода.
Если после исправления этих моментов проблемы сохраняются, предлагаю создать минимальный пример кода, который воспроизводит проблему, и делиться им для более глубокого анализа. Это может помочь более точно определить, где происходит сбой.
Таким образом, рекомендуется проверить типы параметров, следить за синтаксическими ошибками и убедиться в корректном подключении всех библиотек. Надеюсь, это поможет вам решить проблему с вашим кодом.