当前位置:  开发笔记 > 编程语言 > 正文

定义静态const结构

如何解决《定义静态const结构》经验,为你挑选了3个好方法。

这个问题与Symbian OS有关,但我认为C/C++老手也可以帮助我.我正在为Symbian OS编译一个开源库.使用GCCE编译器,它编译没有错误(经过一些修补:)).我将编译器更改为ARMV5,现在我对静态const结构的定义有多个错误,例如:我有一个结构:

typedef struct Foos{
    int a;
    int b;
} Foos;

以下定义了Foos类型的const结构

static const Foos foo = {
    .a = 1,
    .b = 2,
};

GCCE对此没有任何问题,ARMV5在".a = 1,.b = 2"上出现"预期表达式"错误.从我用Google搜索的内容来看,我认为这种方法在C语言中应该是合法的,但在C++中是非法的,如果是这样的话,那么在C++中声明const结构的可能性是什么?如果情况并非如此,那么任何其他帮助将不胜感激.

提前致谢 :)



1> Daniel Sloof..:
static const struct Foos foo = { 1, 2 };

用g ++和gcc编译.

正如onebyone指出的那样,你可以定义一个构造函数:

typedef struct Foos {
    int a;
    int b;
    Foos(int a, int b) : a(a), b(b) {}
};

你会像这样初恋:

static const struct Foos foo(1, 2);



2> Steve Jessop..:

这是合法的C99,但不是合法的C89或C++.据推测,您将其编译为C++,因此如果您使用编译器选项来强制执行标准,那么GCCE也会拒绝它.

你可以foo = {1, 2};用C或C++做.显然你失去了那里的字段名称的好处:你必须依靠获得正确的订单.

C++中另一个不错的选择是为你的struct定义一个构造函数,并用它初始化static const Foos foo(1,2);.但是,这确实会阻止结构为POD,因此您无法对其在内存中的表示做出相同的假设.



3> Shane Powell..:

请注意,某些版本的Symbian上的DLL不支持可写静态数据.它可能不会影响您正在做的事情,因为您的示例是const,或者您可能只支持Symbian v8.1b或更高版本.

当我陷入陷阱时,我想我会指出它.

从上面的链接引用:

支持Symbian OS上的全局可写静态数据

Symbian OS支持所有版本和手机上的EXE中的全局可写静态数据.

基于EKA2内核(8.1b及更高版本)的Symbian OS版本支持目标硬件上的DLL中的WSD.基于EKA1内核的版本8.1a和更早版本不支持DLL中的全局WSD.

推荐阅读
pan2502851807
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有