C++;打印标头中声明的变量时崩溃 我在C++中编写了一个相机>代码>类,我用它来做OpenGL。当我试图打印在Camera.h中声明的任何变量时,程序崩溃。但是如果我设置或获取变量的值,它不会崩溃我做错了什么 照相机 Camera.cpp

C++;打印标头中声明的变量时崩溃 我在C++中编写了一个相机>代码>类,我用它来做OpenGL。当我试图打印在Camera.h中声明的任何变量时,程序崩溃。但是如果我设置或获取变量的值,它不会崩溃我做错了什么 照相机 Camera.cpp,c++,opengl,header,crash,runtime-error,C++,Opengl,Header,Crash,Runtime Error,…在main.cpp中,它工作正常并打印: 主摄像机x=0 嗯,我知道了。这是一个愚蠢的。我忘了在Main.cpp中包含windows.h,出于某种奇怪的原因,它阻止了浮点打印(???)。它现在工作得很好 #include <windows.h> #包括 它是如何崩溃的?你有什么错误?在节目的哪一行?您可以演示如何调用move函数吗?您可能应该在Camera::Camera()构造函数中初始化xPos、yPos和zPos的值。可能到0。C++不能保证数值变量从 0 >代码>开始。不

…在
main.cpp
中,它工作正常并打印:

主摄像机x=0


嗯,我知道了。这是一个愚蠢的。我忘了在
Main.cpp
中包含
windows.h
,出于某种奇怪的原因,它阻止了浮点打印(???)。它现在工作得很好

#include <windows.h>
#包括

它是如何崩溃的?你有什么错误?在节目的哪一行?您可以演示如何调用move函数吗?您可能应该在
Camera::Camera()
构造函数中初始化
xPos
yPos
zPos
的值。可能到
0
。C++不能保证数值变量从<代码> 0 >代码>开始。不过,这不应该导致崩溃。问:你在哪个平台上?窗户?Linux?还有别的吗?问:您是从终端会话还是命令提示符运行?您甚至可以在程序环境中进行终端输出(“cout/printf”)吗?问:你有一个调试器(MSVS还是GDB)?因为你是C++新手,我的第一个建议是学习如何调试调试器来通过代码并检查变量值。我怀疑OpenGL初始化有什么不对,因此<代码> GLTRANTAFE> /COD>正在编写结果矩阵,它不应该在那里。导致内存损坏。这不必直接影响
摄影机
实例-例如
cout
实现或堆可能已损坏。如果这是真的,我们需要查看初始化代码,我们还需要一位OpenGL专家(我不是),这不是问题所在。我的猜测是,代码中的其他地方有一个微妙的错误,导致内存损坏。虽然更改代码可能会延迟问题的出现,但它不是固定的。我已经从C++程序中打印了很多浮点,这些代码不是<代码>包含了<代码>。可能是由于所包含的某些内容导致程序内存布局发生了更改,因此内存损坏仍在发生,但不是以致命的方式发生的,但当其他更改再次修改内存布局时,症状可能会再次出现。我不会完全忽视这样一种可能性,即包括它确实解决了这个问题,但这会有点奇怪。-“因为OpenGL是独立于平台的,所以没有一种初始化OpenGL的标准方法;每个平台的处理方式都不同。”以及“如果您正在使用OpenGL的C/C++语言绑定,那么强烈建议您使用窗口工具包来管理此任务。”。我用OpenGL在C++中玩了一个非常小的量(字面上是一个多边形),我用过了。一个小麻烦-你必须用
使用OPENGL=1
构建wxWidgets。实际上,在阅读中,OPENGL中有一定数量的WTF。“对于您熟悉的大多数库,您只需#包含一个头文件,确保库链接到您的项目或makefile中,就可以正常工作。OpenGL不是这样工作的。”(我的重点)。
    #include "Camera.h"
    #include <iostream>
    #include <GL/glut.h>

    using namespace std;

    Camera::Camera()
    {
    }

    Camera::Camera(float xP, float yP, float zP)
    : xPos(xP), yPos(yP), zPos(zP)
    {
    }

    void Camera::move(float x, float y, float z)
    {
        glTranslatef(-x, -y, -z);
        //None of this crashes:
        xPos = 1;
        yPos = xPos;
        //Crashes here:
        cout << "mainCamera x = " << xPos << endl;
    }
    Camera mainCamera(0.0f, 0.0f, 0.0f);
    cout << "mainCamera x = " << mainCamera.xPos << endl;
#include <windows.h>