首页 > 解决方案 > 如何编译具有默认值的结构定义的.h文件

问题描述

我正在尝试将第 3 方示例代码用作我的 Objective-C 应用程序的一部分。

但是,当尝试编译我的项目时,我得到了很多编译器错误。示例中使用的 objc 语法很奇怪,我相信它在项目中被编译为其他东西。

例如,作为头文件的一部分,结构定义具有默认值:

文件.h

struct Options
{
   int count = 100;
}
...

在他们的项目中,上面的头文件可以编译得很好,但是当我尝试编译它时,我看到一个 XCode 错误:

Expected ';' at end of declaration list

我不是objective-c 专家,但从我读过的内容以及在其他帖子中发现的内容data types不能有默认值,但不知何故它在XCode 示例应用程序中编译得很好。

如果您需要更多信息或其他可以在他们的项目中编译好的示例,请告诉我,当我将代码复制并粘贴到我的中时它不起作用。

编辑:

强制头文件在 Xcode 中编译为 C++

单独的头文件不会编译。编译的源文件,它们包含在其中。如果将它们包含在 .c 中,它们将像 C 一样编译,如果在 .m - 像 Objective-c,如果在 .cpp - 像 C++,如果在 .mm - 像 Objective-C++。

我的问题是我正在将此头文件用于.m将其编译为 Objective-C 标准的文件。当我将扩展名更改为.mm一切正常时。

标签: iosobjective-cxcodeclangobjective-c++

解决方案


当您将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可以欺骗您的想法,其中定义的枚举默认状态是您构建一些东西的基础,这不是一个值。


推荐阅读