0

->演算子を使用してivarを設定したい。エラーが発生しました:インターフェイスタイプを静的に割り当てることができません。ドット演算子は必要ありません。

 @interface Dream : NSObject

 @property (nonatomic, assign) BOOL isBeer;

 @end

クラスViewController

 - (void)viewDidLoad
{
 [super viewDidLoad];

  Dream dr1;
  (&dr1)->isBear = YES;
 }
4

2 に答える 2

2

宣言に「*」がありません:

Dream *dr1;

これがコンパイラエラーの原因です。

Objective-Cでは、new()で作成されたC ++インスタンスと同様に、オブジェクトはポインタによってのみ参照されます。

また、Objective-Cオブジェクトの場合、「->」(矢印)と「。」(ドット)の違いは、C++オブジェクト/C構造体の場合と同じではありません。C / C ++では、ドットを使用してスタック変数のメンバーにアクセスします。例:

// Stack
MyClass myObject;
myObject.memeber = 1; 

MyStruct info;
info.member = 1;


// Heap
MyClass* pMyObject = new MyClass();
myObject->memeber = 1; 

MyStruct* pInfo = (MyStruct*) malloc(sizeof(MyStruct));
pInfo->member = 1;

一方、Objective-Cでは、すべてのオブジェクトがヒープ(ポインターによってのみ参照される)であるため、矢印を使用してメンバーにのみアクセスできます。

一方、ドットは、プロパティのゲッター/セッターを呼び出すという異なる意味を持ち、ivarによってサポートされているかどうかはわかりません。(内部に依存します)

于 2012-06-28T15:34:26.393 に答える
1

インスタンス変数をパブリックにする必要があります。

@interface Dream : NSObject
{
@public
    BOOL isBeer;
}
@end

クラスViewController

- (void)viewDidLoad
{
    [super viewDidLoad];

    Dream *dr1 = [[Dream alloc] init];
    dr1->isBeer = YES;
}
于 2012-06-28T15:24:39.730 に答える