Objective c 在目标C中获取错误
我在下面的代码中得到一个错误。我猜不出我犯了什么错误,导致了这样的错误 远程.hObjective 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
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