ios - 如何编译具有默认值的结构定义的.h文件
问题描述
我正在尝试将第 3 方示例代码用作我的 Objective-C 应用程序的一部分。
但是,当尝试编译我的项目时,我得到了很多编译器错误。示例中使用的 objc 语法很奇怪,我相信它在项目中被编译为其他东西。
例如,作为头文件的一部分,结构定义具有默认值:
文件.h
struct Options
{
int count = 100;
}
...
在他们的项目中,上面的头文件可以编译得很好,但是当我尝试编译它时,我看到一个 XCode 错误:
Expected ';' at end of declaration list
我不是objective-c 专家,但从我读过的内容以及在其他帖子中发现的内容data types
不能有默认值,但不知何故它在XCode 示例应用程序中编译得很好。
如果您需要更多信息或其他可以在他们的项目中编译好的示例,请告诉我,当我将代码复制并粘贴到我的中时它不起作用。
编辑:
单独的头文件不会编译。编译的源文件,它们包含在其中。如果将它们包含在 .c 中,它们将像 C 一样编译,如果在 .m - 像 Objective-c,如果在 .cpp - 像 C++,如果在 .mm - 像 Objective-C++。
我的问题是我正在将此头文件用于.m
将其编译为 Objective-C 标准的文件。当我将扩展名更改为.mm
一切正常时。
解决方案
当您将objective-C视为实际上是C时,它更清楚为什么不在.h文件中设置默认值这不适用于默认大小的规则,当默认情况下没有为数据类型提供灵活的内存分配时,这些规则是必需的,喜欢(原样)C 中的大多数数据类型。
就连这两个句子也已经显示出区分什么意思的困难"default"
。这就是为什么你最终定义了启动过程和函数来声明另一个文件中的“默认”究竟是什么。
#ifdef __cplusplus
extern "C" {
#endif
typedef struct {
int count;
} Options;
typedef struct {
int foo;
Options bar[100];
} Foo;
struct Bar {
Foo lotsof;
}
void MyInitiationFunction(Bar *b);
// definition of MyInitiationFunction in .m/.c file
#ifdef __cplusplus
}
#endif
但是有一个概念enum
可以欺骗您的想法,其中定义的枚举默认状态是您构建一些东西的基础,这不是一个值。
推荐阅读
- python - 机器人唤醒时向所有用户发送消息
- mysql - 从表中选择一个有限的数字,但全部从连接的表中连接
- java - android旋转屏幕导致文本颜色更改为默认值
- amazon-web-services - 将主机 IP 地址分配给 Docker 容器
- python - 数据抓取 Python - 在 href 中获取标签
- python - 构造 ClassDict 的预期参数为零(对于 pyspark.ml.linalg.SparseVector)
- android - 如何解决依赖冲突?
- c# - 使用 google play 游戏检索玩家排名
- bash - bash - 破折号案例到骆驼案例
- angular - 我们如何在角度 2 中动态加载第三方模块