Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/163.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/58.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 如何在全局作用域上初始化结构/类_C++_C_Struct_Initialization - Fatal编程技术网

C++ 如何在全局作用域上初始化结构/类

C++ 如何在全局作用域上初始化结构/类,c++,c,struct,initialization,C++,C,Struct,Initialization,我现在知道如何在全局范围内初始化结构 以下是示例代码: #include<GL/glut.h> struct A { int x; }; struct A a; a.x=6; int main() {} 我不知道为什么会这样。我想知道如何将一个复杂的参数传递给某个回调函数 非常感谢 我在Ubuntu11.10上,当我编译这个程序时,我得到了以下错误:错误:“a”没有命名类型 编译器通过此消息告诉您,对结构成员的赋值不能在全局范围内发生。如果要初始化a,请写入 struct

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

以下是示例代码:

#include<GL/glut.h>
struct A
{
    int x;
};
struct A a;
a.x=6;
int main()
{}
我不知道为什么会这样。我想知道如何将一个复杂的参数传递给某个回调函数

非常感谢

我在Ubuntu11.10上,当我编译这个程序时,我得到了以下错误:错误:“a”没有命名类型

编译器通过此消息告诉您,对结构成员的赋值不能在全局范围内发生。如果要初始化
a
,请写入

struct A a = {6};
或者使用更新的语法

struct A a = {.x = 6};
或在程序启动后的早期(即主程序开始时)进行初始化分配

更新/编辑: 顺便说一句:这与过剩或任何其他标题无关。这是一种语言规范

更新/编辑2 我想知道如何将一个复杂的参数传递给某个回调函数


在GLUT回调的情况下,这将很困难,因为GLUT不允许您指定用户定义的回调数据。您可以使用ffcall库创建原位闭包,然后将其传递给GLUT。但有以下几点需要考虑:一旦你碰到这堵墙,是时候抛弃过剩了。GLUT不是OpenGL开发的要求,也从来没有打算作为复杂应用程序的基础。所以不要使用它。

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

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

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


编辑:这里有一个有点相关的讨论:

尝试将作业移动到主目录。包含GL/glut.h没有什么特别之处-您观察到的错误与此无关。非常感谢……您能解释一下为什么我们不能这样做吗?内存已经分配给对象a,为什么我们不能修改它?和e。如果我们要求一个向量M,在main之外,我们可以把几个元素推回main之外的M。这两者之间有什么区别吗?@mitweyl:因为当时无法定义操作顺序。赋值是在调用构造函数之前还是之后发生的(对于C++)。在全局范围内,只允许静态初始化。新的语法也是C++ 11,或者只有C99席。
#include<GL/glut.h>
struct A
{
    int x;
};
struct A a;
int main()
{
    a.x=6;
}