c++ - 没有默认构造函数的静态 C++ 变量丢失值

标签 c++ sdl static-variables

我有一个带有静态变量的类。因为我需要一个不是默认的构造函数,所以我有点困惑,但我希望我做得很好

class Object3D{

    public:
        static Object3D ObjControl;

        Object3D(); //this is here just for the initialization of the static variable

        Object3D(Triangle *mesh);

        Triangle *mesh;

};

此时我需要创建一个 Object3D 并按以下步骤操作

bool Engine::OnInit() {

    if(SDL_Init(SDL_INIT_EVERYTHING) < 0) {
            return false;
        }

        if((Surf_Display = SDL_SetVideoMode(WIDTH, HEIGTH, BBP, FLAGS)) == NULL) {
            return false;
        }

        arma::colvec::fixed<3> upDirection;
        upDirection << 0 << 1 << 0;

        Camera cam(0.0, 0.0, 10.0, 10.0, 200.0, 90.0, upDirection);
        Camera::CameraControl = cam;

        arma::colvec::fixed<3> vertexA;
        vertexA << -1 << 1 << 0;

        arma::colvec::fixed<3> vertexB;
        vertexB << 1 << 1 << 0;

        arma::colvec::fixed<3> vertexC;
        vertexC << 0 << -1 << 0;

        Triangle tri(vertexA, vertexB, vertexC);
        Triangle mesh[1];
        mesh[0] = tri;
        Object3D obj(mesh);

        Object3D::ObjControl = obj; // PROBLEM! -> when the function extis from the OnInit ObjControl doesn't have anything inside.. it is like cleaned at the exit


        return true;
    }

问题是在return之前在comment中插入的那个

然后当我需要将该对象传递给渲染函数时,如下所示;应用程序关闭,因为我正在尝试访问未初始化的内存位置

void Engine::OnRender(){

    Rendering.WfRender(Object3D::ObjControl, Surf_Display, 1);

}

我认为我对静态变量做错了,但我对 Camera 类的静态变量做了同样的事情,正如您在 Engine::OnInit 中看到的那样,一切正常。所以我不知道发生了什么。

最佳答案

程序中的主要问题是您在函数中创建了一个 Triangle 实例(网格)并将指针传递给静态成员变量 ObjControl。当您离开该函数时,网格不再可用,因此 ObjControl 指向一个无效实例。这可以通过在 Object3D 中存储实际的三角形而不是指向三角形的指针或三角形容器(如果需要更多三角形)来解决。

关于c++ - 没有默认构造函数的静态 C++ 变量丢失值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19520229/

相关文章:

c++ - 如何在 cmake 中使用 emscripten 端口(SDL2 和 Freetype)

c++ - 无法在 SDL 2.0 中加载多个纹理

python - python 中类方法和静态变量的行为

c++ - 为什么 gdb 会在断点处自动继续?

c++ - 什么是最有效的编译和交互式执行周期的 emacs 工作流程(C++/makefile)

c++ - 如何将 *signed* 24 位 int 存储到另一个变量中?

c++ - vs code c++ 断点不能在 mac 中工作

c++ - 全屏中的 SDL OpenGL Alt-tab 具有不可预测的结果

Python 通过不同路径导入相同对象 - 类属性和基元之间的不同行为

c# - 静态成员变量是否对所有 C# 泛型实例化都是通用的?