如何初始化在全球范围内的struct /类(How to initialize struct/cla

2019-07-29 08:04发布

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

以下是一个示例代码:

#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

我不知道为什么这可能发生。 我想知道如何将复杂的参数传递给一些回调函数?

非常感谢

Answer 1:

而我在Ubuntu 11.10,当我编译这个程序,我得到了以下错误:错误:“一个”不姓类型

编译器会告诉你这个消息,这对分配结构成员可以在全球范围内不会发生。 如果你想初始化a要么写

struct A a = {6};

或使用较新的语法

struct A a = {.x = 6};

或者做节目的开始(即在主开始)后早期的初始化分配。

更新/编辑:

BTW:这有什么好做GLUT或任何其他头。 这是语言规范的事情。

更新/编辑2

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

那么,在GLUT的情况下,回调这将是困难的,因为GLUT不允许您指定用户定义的回调数据。 您可以使用ffcall库创建现场封锁随后传递到过剩。 但是有考虑以下情况:只要你打这堵墙,是时候抛弃过剩。 GLUT不是OpenGL开发的要求和根本配不上为复杂应用程序的基础。 因此,只要不使用它呢。



Answer 2:

你在任何函数之外做的任务。 你的情况,你可以移动的,只有一行代码得到执行以下操作:

#include<GL/glut.h>
struct A
{
    int x;
};
struct A a;
int main()
{
    a.x=6;
}


Answer 3:

你正在观察的问题是不相关的,包括过剩。 编译器不会让你在全球范围内的值赋给一个结构。 您可以通过调用结构或通过调用某些函数赋值(这将在全球范围内被允许)的构造实现你想要什么任。

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



文章来源: How to initialize struct/class on the global scope