не может ответить на предупреждение в Задаче C - PullRequest
0 голосов
/ 08 июня 2011

Я получаю предупреждение:

RS232Msg не может ответить на "-initWithRS232MsgRawEncoded"

Код:

-(void)createMessage
{
     RS232Msg* pMsg;
     //pMsg = new RS232MsgRawEncoded(static_cast<int>nMessageNumber); in cpp
     pMsg = [pMsg initWithRS232MsgRawEncoded:(int)nMessageNumber];
}

initWithRS232MsgRawEncoded является производным классом RS232Msg.pMsg - указатель на RS232Msg.CreateMessage - это метод, который объявлен в RS232Msg Как сделать это для доступа?

1 Ответ

0 голосов
/ 08 июня 2011

Если вы определили initWithRS232MsgRawEncoded в классе, производном от RS232Msg, вы не можете использовать этот селектор с RS232Msg*.

Если я правильно понимаю, что вы пытаетесь сделать, вы хотели бы добавить еще одну возможность создания RS232Msg объектов, инициализируя их необработанной кодировкой.

Вы можете сделать это по-разному. Один создает своего рода «фабричный» класс (это не было бы ортодоксальной фабрикой по шаблонам GoF, но это не имеет значения). Этот класс может иметь статическую функцию, которая является именно вашей initWithRS232MsgRawEncoded.

Другой вариант - определить категорию для RS232, а затем добавить в нее initWithRS232MsgRawEncoded. Категории - это способ расширения классов без необходимости их подклассов. Это скелет того, как бы вы поступили в этом случае:

@interface RS232 (MyRS232Extension)
    (id)initWithRS232MsgRawEncoded:....;
 @end

@implementationRS232 (MyRS232Extension)

    ....

@end
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...