如何在 Objective-C 中传递(按值)结构?

Posted

技术标签:

【中文标题】如何在 Objective-C 中传递(按值)结构?【英文标题】:How do I pass (by value) a struct in Objective-C? 【发布时间】:2011-02-14 15:49:07 【问题描述】:

这个让我发疯了!我有一个结构:

typedef struct
  int a;
myStruct;

那么我有:

myStruct tempStruct;

我正在尝试将结构传递给一个类方法,其实现是:

- (void) myFunc:(struct myStruct)oneOfMyStructs;

我这样调用方法:

[myClass myFunc:(struct myStruct)tempStruct];

编译器抱怨“请求转换为非标量类型”。我想做的就是将一个结构传递给一个类方法,但是语法让我有点困惑。我是 Objective-C 的新手。如果你能看出我哪里出错了,请告诉我。我也无法通过引用传递,所以如果你能帮我解决这个问题,那就太好了!

谢谢!

【问题讨论】:

听起来tempStruct在范围内实际上是一个标量类型(intchar,...)。检查您是否收到类似 "Conversion from int to non-scalar type myStruct" 之类的消息。 【参考方案1】:

由于您已将 typedef 编辑为 myStruct,因此您不需要(实际上不能)在函数签名或调用中包含 struct 关键字:

typedef struct tag_myStruct

    int a;

myStruct;

- (void) myFunc:(myStruct) x 

[myClass myFunc:tmpStruct];

应该足够了。 (比较所有采用 NSRects 之类的 Cocoa 函数。)

【讨论】:

感谢您的提示。我已经按照您的建议格式化了代码,但是当我调用函数时编译器会抱怨:“'myFunc' 的参数 1 的类型不兼容”我不愿意发布整个内容,因为它涉及 OpenGL 并且由一半组成十几个文件。我只是忍不住想我在这里做一些根本错误的事情......对函数的调用来自另一个类的函数内部是否重要?我不明白为什么它应该,因为我试图通过价值传递。再次感谢。 没有实际代码很难说。如果类型定义在两个位置都可见,那么从一个类调用另一个类应该没问题。听起来您并没有试图做一些根本错误的事情,只是某些细节不匹配。检查接口中的方法声明是否与实现匹配,是否包含正确的标头等。

以上是关于如何在 Objective-C 中传递(按值)结构?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 x86 程序集中按值传递结构

按值传递和返回结构(带有数组成员)

使用 JNA 在 Clojure 中按值获取和传递结构

按值传递结构,将另一个结构作为其成员之一,更改此成员的成员的值

结构是“按值传递”吗?

C / C ++:将带有成员数组的结构/类按值传递给函数