如何在 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
在范围内实际上是一个标量类型(int
,char
,...)。检查您是否收到类似 "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];
应该足够了。 (比较所有采用 NSRect
s 之类的 Cocoa 函数。)
【讨论】:
感谢您的提示。我已经按照您的建议格式化了代码,但是当我调用函数时编译器会抱怨:“'myFunc' 的参数 1 的类型不兼容”我不愿意发布整个内容,因为它涉及 OpenGL 并且由一半组成十几个文件。我只是忍不住想我在这里做一些根本错误的事情......对函数的调用来自另一个类的函数内部是否重要?我不明白为什么它应该,因为我试图通过价值传递。再次感谢。 没有实际代码很难说。如果类型定义在两个位置都可见,那么从一个类调用另一个类应该没问题。听起来您并没有试图做一些根本错误的事情,只是某些细节不匹配。检查接口中的方法声明是否与实现匹配,是否包含正确的标头等。以上是关于如何在 Objective-C 中传递(按值)结构?的主要内容,如果未能解决你的问题,请参考以下文章