Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/matlab/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Objective c 在目标C中获取错误_Objective C - Fatal编程技术网

Objective c 在目标C中获取错误

Objective c 在目标C中获取错误,objective-c,Objective C,我在下面的代码中得到一个错误。我猜不出我犯了什么错误,导致了这样的错误 远程.h struct RMH_REQUEST_SESSION_MSG //Message Data { int uDeviceID; int uProtocolVersion; int uReserved[5]; }; RS232MsgRequestSession.m @implementation RS232MsgRequestSession -(id)init { if (self

我在下面的代码中得到一个错误。我猜不出我犯了什么错误,导致了这样的错误

远程.h

 struct RMH_REQUEST_SESSION_MSG  //Message Data
 {
  int  uDeviceID;
  int  uProtocolVersion;
  int  uReserved[5];
 };
RS232MsgRequestSession.m

@implementation RS232MsgRequestSession

-(id)init
{
    if (self = [super init]) {
        struct RMH_REQUEST_SESSION_MSG st;
    }
    return self;
}
@end
xyz.h


错误:'struct RS232MsgRequestSession'没有名为'st'的成员

将iVar声明放入类的@interface块中。在您的代码中,st只是init方法中的一个局部变量:

@interface RS232MsgRequestSession : NSObject{
...
@public
struct RMH_REQUEST_SESSION_MSG st;
}
...
@end

您忘记了将struct作为公共实例变量包含在@interface中:

@interface RMH2532MsgRequestSession : NSObject {
@public
   struct RMH_REQUEST_SESSION_MSG st;
}
- (void) Open;
@end
您的@implementation应该为空:

@implementation RS232MsgRequestSession
@end
PS-您必须在此处使用@public的原因是,在xyz中,您使用成员运算符->对对象进行直接解引用。使用Objective-C对象时,默认情况下不允许这样做。但是,如果实例变量位于@public属性下,那么执行此操作不会有任何问题


正如您现在可能已经猜到的,使用@public是一个非常糟糕的主意——通常是。它打破了封装,打开了一个潘多拉的潜在问题盒,如果使用正确的封装,您将不会遇到这些问题。

您将st定义为init函数中的局部变量

Move struct RMH\u REQUEST\u SESSION\u MSG st;到RS232MsgRequestSession.h中的类定义

@implementation RS232MsgRequestSession
@end