我现在知道如何在全局范围内初始化结构。
以下是示例代码:
#include<GL/glut.h>
struct A
{
int x;
};
struct A a;
a.x=6;
int main()
{}
我在 Ubuntu 11.10 上,当我编译这个程序时,我收到以下错误:
error: ‘a’ does not name a type
我不知道为什么会发生这种情况。我想知道如何将复杂的参数传递给某个回调函数?
非常感谢
我现在知道如何在全局范围内初始化结构。
以下是示例代码:
#include<GL/glut.h>
struct A
{
int x;
};
struct A a;
a.x=6;
int main()
{}
我在 Ubuntu 11.10 上,当我编译这个程序时,我收到以下错误:
error: ‘a’ does not name a type
我不知道为什么会发生这种情况。我想知道如何将复杂的参数传递给某个回调函数?
非常感谢
我在 Ubuntu 11.10 上,当我编译这个程序时,我收到以下错误:错误:'a'没有命名类型
编译器通过此消息告诉您,对结构成员的分配不能在全局范围内发生。如果你想初始化a
任一写
struct A a = {6};
或使用更新的语法
struct A a = {.x = 6};
或在程序启动后尽早进行初始化分配(即在 main 的开头)。
顺便说一句:这与 GLUT 或任何其他标题无关。这是语言规范的事情。
我想知道如何将复杂的参数传递给某个回调函数?
好吧,在 GLUT 回调的情况下会很困难,因为 GLUT 不允许您指定用户定义的回调数据。您可以使用ffcall库创建原位闭包,然后将其传递给 GLUT。但是有以下几点需要考虑:一旦你碰到这堵墙,就该放弃 GLUT。GLUT 不是 OpenGL 开发的必要条件,也不是复杂应用程序的基础。因此,请不要使用它。
您正在执行任何功能之外的任务。在您的情况下,您只能移动一行代码来获得以下内容:
#include<GL/glut.h>
struct A
{
int x;
};
struct A a;
int main()
{
a.x=6;
}
您观察到的问题与包括过剩无关。编译器不允许您为全局范围内的结构赋值。您可以通过调用结构的构造函数(在全局范围内允许)或通过调用某个函数中的赋值来实现您想要的。
编辑:这是一个有点相关的讨论:Why can't I access my array subscript in global scope