标签: structure

在C++中声明头文件中的全局结构

我在头文件中创建了一个结构,如下所示:

typedef struct
{
    GLfloat lgtR, lgtG, lgtB, lgtA;
    GLfloat x, y, z;
    bool islight;
    GLfloat width, height, depth;
    GLenum lightn;
    particle prt;
    int maxprt;
} emitter;
Run Code Online (Sandbox Code Playgroud)

这没有问题.

但是,在那个特定的头文件中,我想声明一个可以在所有函数中使用的全局发射器,它不是主源文件的一部分:

// header.h global declaration

emmiter currentEmit;

GLvoid glSetEmitter(emitter emitter)
{
    currentEmit = emitter;
}
Run Code Online (Sandbox Code Playgroud)

但是,当我尝试这个时,我得到了很多"错误C2228:'.variable'的左边必须有class/struct/union,所以我假设它根本没有声明我的结构.

有没有办法在头文件中全局声明该结构,如果是这样,是否还有一种方法可以防止它成为其他.cpp文件的一部分?

c++ opengl structure declaration global-variables

0
推荐指数
1
解决办法
1450
查看次数

如何创建和使用指向类中未知数量结构的数组的指针?

对不起令人困惑的标题......

我一直在玩C++,正在开发一个解析游戏(Kerbal Space Program)保存文件的项目,所以我可以修改它并最终通过网络发送它.我被困在存放不明数量的船只和船员,所以我需要一个未知大小的阵列.

这可能吗?我想有一个指向数组的指针将是你要走的路.

我有:

class SaveFileSystem 
{
    string version;
    string UT;
    int activeVessel;
    int numCrew;
    ??? Crews; // !!
    int numVessels;
    ??? Vessels; // !!
}
Run Code Online (Sandbox Code Playgroud)

船员和船只应该是结构阵列:

struct Crew 
{
    string name;
    //Other stuff
};

struct Vessel
{

    string name;
    //Stuff
};
Run Code Online (Sandbox Code Playgroud)

我猜我应该有类似的东西:

    this->Crews = new ???;
    this->Vessels = new ???;
Run Code Online (Sandbox Code Playgroud)

在我的构造函数中初始化数组,并尝试使用以下命令访问它:

this->Crews[0].name = "Ship Number One";
Run Code Online (Sandbox Code Playgroud)

这有意义吗???我希望"???"包含一堆星号,比如"*struct(*)Crews",但我没有真正的想法.我有正常的指针,等等,但这有点过头了......我想访问最后一个片段中的结构,但如果C++不喜欢,我可以做指针算术.

我已经研究了向量,但我对效率有一种不健康的痴迷,而且我真的很难过你怎么不知道它背后会发生什么.

c++ arrays pointers structure

0
推荐指数
1
解决办法
160
查看次数

matlab中的结构:节省负载和工作

我正在尝试使用matlab中的结构.我有一个代码如下:

for i=1:10
    a(i).p=some value;
    a(i).q=some other value
end
Run Code Online (Sandbox Code Playgroud)

我将它保存到mat文件中,但似乎没有成功.任何人都可以告诉我,如何将此结构保存并加载到文件/从文件中读取特定类型的数据?例如,如何a(i).q在加载结构后读取字段?谢谢

matlab structure

0
推荐指数
1
解决办法
6089
查看次数

结构的大小

我有一个结构:

typedef struct {
    char fname[100], lname[100];
    int age, salary;
} *employer;
Run Code Online (Sandbox Code Playgroud)

而现在,我想要一个指针变量empl1,它包含足够的空间供100名员工使用:

employer empl1 = malloc(100 * sizeof(employer));
Run Code Online (Sandbox Code Playgroud)

问题是sizeof(雇主)4 (我的机器上指针的大小).我如何获得所有雇主结构的规模?(在我的情况下是208).

c size malloc struct structure

0
推荐指数
1
解决办法
73
查看次数

在C中获取结构

我开发了一个返回30个数据的代码:

int data1;
int data2;
int data3;
...
float datan;
 ...
float datam;   
Run Code Online (Sandbox Code Playgroud)

除两个外,所有数据都具有相同的类型.我希望同时获得所有这些数据.我的解决方案是在结构中收集所有这些数据,但它并不优雅.你有其他解决方案吗?

c structure

0
推荐指数
1
解决办法
68
查看次数

requestAnimationFrame/cancelAnimationFrame的正确用法

在使用requestAnimationFrame API时,我遇到了一个问题.这可能是因为我使用的结构是错误的,但对我来说似乎合乎逻辑.

我基本上做的是一个非常简单的背景位置操作,以实现无限下降效果:

(此版本已简化,但有说明性)

cache.mechanism.snowFall = function(){

    cache.snow.position.y ++;
    if( cache.snow.position.y > cache.viewport.height ){ 
        cache.snow.position.y -= cache.viewport.height; 
    }
    cache.snow.elem.style.backgroundPosition = "0px " + cache.snow.position.y + "px";

    requestAnimationFrame( cache.mechanism.snowFall );

};
Run Code Online (Sandbox Code Playgroud)

实际上,它会将每个动画帧的背景位置移动1px.(必要时重置,以避免高油漆时间和FPS损失)

我通过调用初始化它:

cache.mechanism.snowFall();
Run Code Online (Sandbox Code Playgroud)

因此,它运行良好,具有非常高的FPS,但是不可能阻止它.

cancelAnimationFrame( cache.mechanism.snowFall );
Run Code Online (Sandbox Code Playgroud)

什么都不做,并返回undefined.

javascript structure requestanimationframe

0
推荐指数
1
解决办法
2678
查看次数

在C中传递结构

当我将struct指针传递给函数时,我希望在函数结束后保留​​对指针所做的更改.我不知道我做错了什么.

void webSocketHandler(struct libwebsocket_context* context)
{    
    /* some code */
    context = libwebsocket_create_context(&info);
}

sint32 s32_WSER_Init(sint32* configDataPoolIndexes, struct libwebsocket_context* context)
{
   /* some code */
  webSocketHandler(configDataPoolIndexes, context);
}
Run Code Online (Sandbox Code Playgroud)

问题是在创建它之后context不在NULL内部webSocketHandler,但如果我s32_WSER_Init在调用处理程序后尝试在内部使用它,我会得到NULL.

提前致谢.

c pointers structure function

0
推荐指数
1
解决办法
102
查看次数

位字段给出分段错误

这是C语言.当我运行以下程序时,无论我给出的值有多小,我都会得到运行时分段错误.请帮我找出原因.

#include <stdio.h>
#include <stdlib.h>
struct date
{
unsigned day:
    5;
unsigned month:
    4;
unsigned year:
    12;
};
struct emp
{
    char name[10];
    struct date d;
};
int compare(const void * a, const void * b)
{
    struct emp *orderA = (struct emp *)a;
    struct emp *orderB = (struct emp *)b;
    return (  orderA->d.year - orderB->d.year  );
}
int main ()
{
    int i;
    struct emp e[5];
    for (i = 0;i < 5;i++)
    {
        scanf("%s %d %d %d", e[i].name, e[i].d.day, …
Run Code Online (Sandbox Code Playgroud)

c structure scanf segmentation-fault bit-fields

0
推荐指数
1
解决办法
158
查看次数

是否可以分配两种不同类型的结构?

我需要将类似的结构分配给另一个,只是名称不同.如果它具有相同的名称,我们可以直接使用=(赋值).我不想使用memcopy,因为它会复制位.

struct first {
  int i;
  char c;
};

struct second {
  int i;
  char c;

  //we can overload assignment operator to copy field.
  void operator = ( struct first& f) {
      i=f.i;
      c=f.c;
  }
};

int main()
{
  struct first f;
  f.i=100;
  f.c='a';
  struct second s=f; 
}
Run Code Online (Sandbox Code Playgroud)

但我收到编译错误.错误:请求从"第一个"转换为非标量类型"第二个".

不确定是否可能.

c++ structure

0
推荐指数
1
解决办法
603
查看次数

结构中的枚举

我的C文件有一个结构和一个枚举.

struct list{
    enum {1 , 2 ,3, 4};
    //defining a variable 'a'
};
Run Code Online (Sandbox Code Playgroud)

我希望变量的数据类型取决于枚举的选择.例如:如果选择枚举'1','a'应为'int','2'为float等.

c enums struct structure unions

0
推荐指数
1
解决办法
184
查看次数