Неясный пример на learnopengl.com с проблемой точки с запятой

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

Привет, я изучаю C++ и OpenGL. На https://learnopengl.com/Getting-started/Hello-Window
есть пример того, как открыть окно OpenGL с помощью GLFW. Однако при компиляции на строке 31 я получаю ошибку:

hellowindow.cpp: в функции ‘int main()’:
hellowindow.cpp:33:16: ошибка: ‘width’ не объявлен в этой области видимости; вы имели в виду ‘wcwidth’?
33 | glViewport(0,0,width,height);
| ^~~~~
| wcwidth
hellowindow.cpp:33:22: ошибка: ‘height’ не объявлен в этой области видимости
33 | glViewport(0,0,width,height);

в примере показано void framebuffer_size_callback(GLFWwindow* window, int width, int height);

с точкой с запятой и без нее.

когда я убираю точку с запятой, я получаю
hellowindow.cpp: в функции ‘int main()’:
hellowindow.cpp:32:1: ошибка: определение функции не разрешено здесь до ‘
’ токена
32 | {

Пожалуйста, помогите мне скомпилировать.

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

Здравствуйте. Ваш запрос относится к вопросу инициализации окна OpenGL с использованием библиотеки GLFW, при этом возникает ошибка компиляции в C++. Давайте разберёмся в этой проблеме.

Теория:

Ошибка, которую вы наблюдаете, указывает на отсутствие объявления переменных width и height в области видимости функции main(). В языке C++ переменные должны быть объявлены в той области, где они используются, или переданы как параметры. В вашем случае вы, вероятно, пытаетесь вызвать функцию glViewport(0, 0, width, height);, где значения width и height не были ранее определены в коде функции main().

Пример:

Рассмотрим стандартный способ использования функции glViewport. Обычно она используется в функции обратного вызова, такой как framebuffer_size_callback, чтобы обновить размеры видового экрана при изменении размера окна. Код может выглядеть следующим образом:

void framebuffer_size_callback(GLFWwindow* window, int width, int height)
{
    glViewport(0, 0, width, height);
}

int main()
{
    // Код инициализации GLFW и OpenGL...

    // Установка функции обратного вызова для изменения размера окна
    glfwSetFramebufferSizeCallback(window, framebuffer_size_callback);

    // Основной цикл рендеринга
    while (!glfwWindowShouldClose(window))
    {
        // Код рендеринга...

        glfwSwapBuffers(window);
        glfwPollEvents();
    }

    glfwTerminate();
    return 0;
}

Применение:

Чтобы исправить вашу ошибку, вам необходимо убедиться в правильной реализации и следованию обычной практике использования функций обратного вызова. Проверьте следующие моменты:

  1. Определите функцию framebuffer_size_callback отдельно в вашем файле, без точки с запятой после её объявления.
  2. Убедитесь, что вы правильно устанавливаете функцию обратного вызова с помощью glfwSetFramebufferSizeCallback.
  3. Вызовите glViewport внутри функции framebuffer_size_callback, а не в main, если размеры окна передаются через функцию обратного вызова.

Таким образом, ваша программа должна успешно скомпилироваться и выполниться без ошибок, связанных с объявлением переменных. Помните, что в C++ правильное объявление и передача параметров – ключевые элементы написания корректного и работающего кода.

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

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