我是Objective C的新手。我正在将cpp代码移植到Objective C。
pMsg->TxCreateImage((INT8U*)m_cData.m_abTxMsgImage,m_cData.m_nTxImageSize);
TxCreateImage((INT8U*)pData,int uLen)
{
func definition;
}
TxCreateImage是一个函数调用。 m_cData是另一个类的对象。
此Objective C等效是否正确。
Data* pMsg = [[Data alloc]init];
Ds* m_cData;
[pMsg TxCreateImage:(int *)[m_cData m_abTxMsgImage] :(int)[m_cData m_nTxImageSize]];
- (void)TxCreateImage:(int*)pData :(int)uLen
{
//func definition;
}
我得到的例外情况,
-[Packet m_nTxImageSize]: unrecognized selector sent to instance 0x100831e00
2011-05-04 17:11:07.756 Test-packetCreation[4633:a0f] *** Terminating app due to uncaught
exception 'NSInvalidArgumentException', reason: '-[Ds m_nTxImageSize]: unrecognized
selector sent to instance 0x100831e00'
答案 0 :(得分:2)
您需要初始化m_cData。而且我不太确定将指针传递给整数;如果这不起作用,请尝试查看m_nTxImageSize的返回类型;
无法识别的选择器意味着它无法访问/查看m_nTxImageSize调用的方法
答案 1 :(得分:1)
Objective-C和C ++之间存在巨大差异:
=> 邮件发送后期绑定。
你应该养成做出某种错误的习惯。
查看您Ds
类定义,看看您是否有访问者-m_abTxMsgImage
。
记住所有实例变量(对于C ++人来说都是memeber)都受到保护。
如果要将其公开,则必须使用@public
指令。
见here
另外,方法-TxCreateImage::
的命名不是在objective-c中命名方法的最佳方法。
喜欢-createImageText:size:
对于访问者,set方法名为setMyInstVar
,get方法为myInstVar
。另外,将m_
添加到实例变量并不常见。
Accessor可以使用@synthesize
指令自动创建,该指令遵循我上面告诉你的惯例。