2017-07-16 104 views
-2

我希望有一个窗口标题,每当窗口被调整大小时都会自动更新。它应该是一个格式,使标题显示为 窗口大小 - [宽度] x [高度] 但结果我得到一个标题,显示_alloca已损坏。当调整大小时在标题中更新窗口尺寸

int main(void) 
{ 
    GLFWwindow *window = NULL; //initialise window with pointer to GLFW handle 
    glfwSetErrorCallback(error_callback); 

    //initialise GLFW 
    if (!glfwInit()) 
    { 
     //if failed to initialise GLFW 
     exit(EXIT_FAILURE); 
    } 
    //minimum OpenGL version 3.3 
    glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, 3); 
    glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, 3); 

    //create the window here 
    window = glfwCreateWindow(WINDOW_WIDTH, WINDOW_HEIGHT, "Window Size - " + WINDOW_WIDTH + "x" + WINDOW_HEIGHT, NULL, NULL); 

    //if window fail, terminate GLFW 
    if (window == NULL) 
    { 
     glfwTerminate(); 
     exit(EXIT_FAILURE); 
    } 

    glfwMakeContextCurrent(window); // set window context as the current context 
    glfwSwapInterval(1);   // swap buffer interval 

    // initialise GLEW 
    if (glewInit() != GLEW_OK) 
    { 
     // if failed to initialise GLEW 
     cerr << "GLEW initialisation failed" << endl; 
     exit(EXIT_FAILURE); 
    } 

    //set key callback function 
    glfwSetKeyCallback(window, key_callback); 

    //render loop 
    while (!glfwWindowShouldClose(window)) 
    { 
     glClear(GL_COLOR_BUFFER_BIT); 

     glfwSwapBuffers(window); //swap buffers 
     glfwPollEvents();   //poll for events 
    } 

    //close window, terminate GLFW 
    glfwDestroyWindow(window); 
    glfwTerminate(); 
    exit(EXIT_SUCCESS); 
} 
+0

而不只是反对投票至少我可以知道那是什么,我已经做了错误。谢谢 – Monomoni

+2

这里有一个问题:''窗口大小 - “+ WINDOW_WIDTH +”x“+ WINDOW_HEIGHT'这不是合法的C++。你的编译器应该给你一个错误。 –

+0

@NicolBolas:假设'WINDOW_WIDTH'类似于'#define WINDOW_WIDTH 300',这个编译非常好(在VS2013上测试)。由于第一部分是一个'const char *',因此可以向它添加一个整数(指针算术)。 – BDL

回答

2

由于@NicoleBolas在评论中已经提到的,有问题的部分是

"Window Size - " + WINDOW_WIDTH + "x" + WINDOW_HEIGHT 

这是合法的C++,但不会做你希望它做什么。这里WINDOW_WIDTH的值被添加到"Window Size"常数的地址。结果是一个新的指针,它将你的情况指向一个无效的内存地址。

如果要将宽度和高度作为文本添加,则必须先将数字转换为文本,然后将结果串连接起来。这样做的一个简单的方法是使用stringstream

std::stringstream s; 
s << "Window Size - " << WINDOW_WIDTH << "x" << WINDOW_HEIGHT; 

window = glfwCreateWindow(WINDOW_WIDTH, WINDOW_HEIGHT, s.str().c_str(), NULL, NULL); 
相关问题