gpt4 book ai didi

c++ - 在我的主文件中全局创建 C++ 类实例

转载 作者:行者123 更新时间:2023-11-28 02:43:49 24 4
gpt4 key购买 nike

我有一个程序,其中包含一些用于 OpenGL 内容的类,例如窗口、程序等

我希望我在主文件中使用的 Window 和 Program 类的实例对于主文件来说是全局的,我已经用这样的 Window 做了一段时间

//Outside main()
Window window
(
"test", //title
1366, //width
768, //height
);

然后我可以在主文件的其余部分使用这个实例,例如

//Within main()

window.create();

window.refresh();

等等

现在,当我尝试创建 Program 的全局实例时,我会这样做:

//Just below Window, still outside main()
Program program(); //No arguments for the constructor for Program

然后当我尝试像这样在我的主要功能中使用它时:

program.addShader(GL_VERTEX_SHADER, "vertex_shader_source.glsl");

我得到错误:

request for member 'addShader' in 'program', which is of non-class type 'Program()'

经过调查,编译器似乎认为我在 main() 之前对实例的初始化是一个函数,所以它认为我正在尝试调用一个显然不起作用的函数的方法。

我只是想不出如何使它像在 Window 上那样工作,我可以说出可能意味着 Window 工作而 Program 不工作的主要区别是:

  • Window 的构造函数有参数,而 Program 没有。
  • 我在 main() 中有 Program 类的其他实例,而不是这个全局实例,当然它们有不同的名称,但仍然可能导致一些问题?

最佳答案

您发现了所谓的 most vexing parse .

确实,当您这样做时:

Program program();

它是模棱两可的,因为你可以做两件事:

  • 创建一个变量program which ctor takes no argument
  • 声明一个名为 program 的函数,它返回一个 Program 并且不接受任何参数

并且 C++ 标准强制编译器在遇到此代码时选择第二种可能性。

为避免此问题,只需删除括号

//Declares and defines a new program variable by invoking the default ctor
Program program;

关于c++ - 在我的主文件中全局创建 C++ 类实例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25077267/

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