Запрос для члена ‘pData’ со значением BOOL TRUE не является структурой или объединением-Objective C

#objective-c

#objective-c

Вопрос:

Я не смог использовать pData [4096], чтобы передать его другой функции из main.

 data.m
------
@implementation data
static int msgID;
static char pData[4096]="";

  (void)initialize
{
 //some initialisations
msgID =123;
}

-(void)SwapEndian:(uint8_t*)pData withBOOLValue:(BOOL)bIsAlreadyLittleEndian
{
  NSLog("%s %s",pData,bIsAlreadyLittleEndian);
}
@end

main.m
-------

[dat SwapEndian:dat.pData withBOOLValue:TRUE];
  

Я получаю необъявленные pData. Поскольку pData объявляется как статический внутри Данных

реализацию я пробовал с dat.pData, чтобы передать его из main.Но когда я делаю это, я получаю

Запрос для члена ‘pData’ со значением BOOL TRUE не является структурой или объединением.

Комментарии:

1. Вы не используете Objective-C так, как это предназначено для использования. Извините за прямоту, но я думаю, что такие вещи важно знать :) . Можете ли вы описать, чего вы пытаетесь достичь с помощью этого кода?

2. @e.James: Буфер pData заполнен некоторыми значениями (такими как заголовок, данные и хвостовик) в функции, называемой DataBuffer класса ‘data’. Теперь мне нужно перевести весь буфер в формат Litte Indian. Итак, я написал функцию внутри класса для преобразования. Теперь изначально я просто проверяю, получаю ли я буфер pData со значениями, инициализированными функцией DataBuffer. Итак, как мне нужно передать pData из main.

Ответ №1:

Сложно определить, что должен делать код, но вот как создать объект Objective-C, который содержит целочисленный идентификатор и массив из 4096 символов. Пожалуйста, обратите внимание, что такого рода вещи обычно не поощряются. Если у вас нет действительно конкретной причины для использования int и char[] , идентификатор должен быть NSInteger , а данные должны быть объектом NSData or NSString .

Я также использовал некоторые «стандартные» соглашения об именовании. Если вы пишете код Cocoa, это помогает выпить много Kool-Aid.

Message.h:

 @interface Message : NSObject
{
    int identifier;
    char data[4096];
}
@property (nonatomic, assign) int indentifier;
@property (nonatomic, readonly) char * data;
- (void)swapEndian:(BOOL)flag;
@end
  

Message.m:

 @implementation Message

@synthesize identifier;
@synthesize data;

- (id)init
{
    if ((self = [super init]) == nil) { return nil; }
    identifier = 0;
    data[0] = '';
    return self;
}

- (void)swapEndian:(BOOL)flag
{
    NSLog(@"%s %d", data, flag);
}

@end
  

main.m:

 #import "Message.h"

...

Message * message = [[[Message alloc] init] autorelease];
message.identifier = 123;
[message swapEndian:YES];
  

Комментарии:

1. ошибка: тип свойства ‘data’ не соответствует типу ivar ‘data’, который вводится в объявлении @synthesize data. У меня есть некоторое значение в буфере данных, которое инициализировано в func1 (), и мне нужно передать его функции swapEndians. Как передать этот буфер данных из main в функцию swapEndian