#c #glfw
#c #glfw
Вопрос:
Недавно я учился программировать на c , но столкнулся с проблемой при использовании GLEW и GLFW.
Источник (.cpp):
#include<iostream>
#define GLEW_STATIC
#include "GLEW/glew.h"
#include <GLFW/glfw3.h>
int main(){
std::cout<<"test";
GLFWWindow* window;
window = glfwCreateWindow(800,600,"Test", glfwGetPrimaryMonitor(),NULL);
return 0;
}
Эта программа компилируется без ошибок, но при ее запуске выходные данные не генерируются, несмотря на std::cout . Однако, как только вызов glfwCreateWindow закомментирован, программа показывает результат, который она должна.
Я крайне смущен этим и хотел бы знать, могу ли я что-нибудь сделать, чтобы это исправить.
РЕДАКТИРОВАТЬ: я сомневаюсь, что это проблема с std::cout, потому что, когда я пытаюсь показать окно таким образом, я по-прежнему не получаю ответа от программы.
glfwShowWindow(window);
while(!glfwWindowShouldClose(window))glfwPollEvents();
glfwDestroyWindow(window);
РЕДАКТИРОВАТЬ 2:
Вот мой код на данный момент:
#define GLEW_STATIC
#include "GLEW/glew.h"
#include <GLFW/glfw3.h>
#include <iostream>
int main(){
std::cout<<"test" << std::endl;
glfwInit();
GLFWwindow* window;
window = glfwCreateWindow(800,600,"TEST", NULL, NULL);
glfwShowWindow(window);
while(!glfwWindowShouldClose(window))glfwPollEvents();
glfwDestroyWindow(window);
glfwTerminate();
std::cin.get();
}
ПРАВКА 3: Заголовок
РЕДАКТИРОВАТЬ 4: После некоторых экспериментов я обнаружил, что любое упоминание о вызове glfw в исходном файле, похоже, препятствует запуску программы. Следующее не генерирует никаких выходных данных:
int main(){
std::cout<<"test" << std::endl;
std::cout.flush();
std::cin.get();
}
void test(){
glfwInit();
GLFWwindow* window;
window = glfwCreateWindow(800,600,"TEST", NULL, NULL);
glfwShowWindow(window);
while(!glfwWindowShouldClose(window))glfwPollEvents();
glfwDestroyWindow(window);
glfwTerminate();
}
Комментарии:
1. Перенаправьте вывод вашей программы в файл. Похоже, у вас просто недопонимание с вашим эмулятором терминала, а не с C .
2. Попробуйте завершить вывод новой строкой. Вероятно, вы просто не замечаете вывод, потому что он находится в той же строке, что и ваше приглашение.
3. std::cout<<«test»<<std::endl; кажется, не имеет значения. Мне еще предстоит попробовать перенаправление на файл.
4. Возможно, вызовите необходимый код для завершения
glfw
программы:glfwTerminate()
5. @mr5 Похоже, что программа даже не выполняет метод main() в первую очередь.
Ответ №1:
Некоторые причины отсутствия вывода на stdout
:
- Если вы работаете в Windows, ваша программа, возможно, была скомпилирована в подсистеме Windows. Затем любая печать
stdout
будет отправлена в bitbucket. Если вы используете набор инструментов MinGW, это контролируется флагом-mwindows
компоновщика - Если программа выходит из строя, то буферизованный вывод может быть не записан. Поэтому попробуйте очистить выходной поток, прежде чем делать что-либо еще. Обратите внимание, что программы могут аварийно завершать работу.
Некоторые вещи, которые вы можете спросить, чтобы узнать больше:
- Что происходит, когда вы пошагово просматриваете свой код с помощью отладчика, поставляемого с вашим компилятором?
- Поскольку
glfwCreateWindow
вывод скрыт, возможно, он выходит из строя внутри этой функции. Вы передали правильные аргументы? glfwCreateWindow
Возвращает ли действительный указатель?
Комментарии:
1. Я внес некоторые изменения, которые могут дать более полное представление о проблеме
Ответ №2:
У меня была такая же проблема, когда я просматривал документацию для glfwCreateWindow(), Указано, что вы должны вызывать glfwCreateWindow() только в основной функции.
попробуйте передать glfwCreateWindow в качестве параметра для test()