如何在全局范围内初始化struct / class

我现在知道如何在全局范围内初始化结构。

以下是示例代码:

#include struct A { int x; }; struct A a; ax=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或任何其他标题无关。 这是语言规范的事情。

更新/编辑2

我想知道如何将复杂参数传递给某些回调函数?

好吧,在GLUT回调的情况下,它会很困难,因为GLUT不允许您指定用户定义的回调数据。 您可以使用ffcall库创建原位闭包 ,然后将其传递给GLUT。 但是有以下几点需要考虑:一旦你碰到这堵墙,就该放弃GLUT了。 GLUT不是OpenGL开发的必要条件,也不是复杂应用程序的基础。 所以就这样不要使用它。

你在任何function之外做任务。 在您的情况下,您只能移动一行代码来获得以下内容:

 #include struct A { int x; }; struct A a; int main() { ax=6; } 

您观察到的问题与包含过剩无关。 编译器不允许您为全局范围中的结构赋值。 您可以通过调用结构的构造函数(在全局范围内允许)或通过在某个函数中调用赋值来实现您想要的。

编辑:这是一个有点相关的讨论: 为什么我不能在全局范围内访问我的数组下标