gpt4 book ai didi

c++ - 不打电话就工作的过分热心的方法? C++ Glut初始化变得流氓

转载 作者:行者123 更新时间:2023-11-28 08:27:08 25 4
gpt4 key购买 nike

菜鸟 C++ 程序员仍然在这里。

我正在使用 VC++ VS2008 编译器和过剩库。所有工作正常并且是最新的(由于 XNA (C#) 支持原因,我知道 2010 年只有 cba)

好的,这次我有一个与代码相关的问题,但我可以使代码正常工作。我不能做的是弄清楚引擎盖下发生了什么。这就是我想弄清楚的。

假设一切正常,因为显然在运行时它有效!

这是代码(最小化到实际运行到它的裸核以帮助加快速度)

#include "stdafx.h"
#include "Controller.h"
#include "glut.h"
#include <iostream>

void main(int argc, char** argv)
{
glutInit(&argc, argv);
//controller_ptr->InitController(); <---- no link to controller-->DrawScene

//INIT GLUT
//glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGB | GLUT_DEPTH);
//glutInitWindowSize(400, 400); //Set the window size
//glutCreateWindow("Some Program");

//INIT RENDERING
glEnable(GL_DEPTH_TEST);

glutDisplayFunc(drawScene);
glutKeyboardFunc(handleKeypress);
glutReshapeFunc(handleResize);
glutMainLoop();
}

您可能在想,嘿,您对初始化代码进行了注释。我确实如此。你猜怎么着,它还在工作!为什么?我真的不知道除了烧烤之外的过剩,所以你.... <---- 如果有的话,这可能是你称之为失败的好点

我有一个用这个方法绘制场景的类

void DrawScene::initGlut()
{
//Enables depth culling/front face culling?????? <----- what about that, some depth thingy was involved is all I'm sure of
glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGB | GLUT_DEPTH);
glutInitWindowSize(400, 400); //Set the window size
glutCreateWindow("Some Program");
}

当我评论这个并取消注释主要的那个时,结果相同。我没有评论,过剩说 init 完成了两次,我也没有评论,init 没有完成一切都在繁荣。所以唯一合乎逻辑的结论是调用了这个方法,对吧?

周围有很多其他方法和类,但没有 displayescene 类或 Controller 类的实例。我可以评论包含,它会做同样的事情。

在 MSbuild 或 VC++ 开发中是否有一些我不理解的设计部分允许方法沿着我不知道的一些流或流程进行筛选?据我所知,如果我不创建一个类的实例,它是不相关的,至少它是非静态成员。那么这段代码在该成员中处于事件状态或不活动状态如何对我的程序产生影响呢?

可能会忘记一些非常愚蠢的事情,但我宁愿尽快找出答案。不管怎样,作为一个菜鸟的好处是我不在乎摔倒在地然后再试一次,所以不要理会评论^^

非常感谢您!

编辑:什么?现在,没有对代码进行任何更改的控制台确实报告了一次对 init 的双重调用,其中主要的 init 在注释中,而 drawscene 中的那个不在注释中......我非常困惑。

编辑 2:2010 年 8 月 29 日 14:45

好吧,我发现了一些东西......

drawscene中的构造函数调用类的initGlut和initRendering方法。 Controller 指向保存 drawScene 对象的堆,这会导致方法运行初始化代码。

然而, Controller 不包含在主 Controller 中,也没有实例化。该 drawScene 代码在主程序启动之前运行,然后我是否可以得出构建本身就是问题的结论,因此我应该避免在构造函数中使用初始化代码?

编辑 3:15:02 29/08/2010

发现另一个,当只有 drawScene 是事件的初始化代码时,确实会发生双重调用。会不会是drawscene的每次include都会导致构造函数代码运行init代码导致double init?

最佳答案

为什么不在您的初始化代码上设置一个断点,然后沿着调用堆栈向上走,看看它在哪里被调用?

慢慢浏览它,我想你会找到源头..

编辑:将诸如库之类的东西的初始化保留在构造函数之外是一种很好的做法。就我个人而言,如果需要,我只会测试是否已在构造函数中初始化过剩,如果未检测到,则抛出异常。

关于c++ - 不打电话就工作的过分热心的方法? C++ Glut初始化变得流氓,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3594728/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com