0

以下は、ヘッダー ファイルからのサンプル コードです (コンストラクターがありません)。

class MyItem
{
   // blah blah
};

class MyClass
{
  public:
  __property MyItem Item = {read=GetItem, write=SetItem};

   private
   MyItem FItem;
   MyItem GetItem(void);
   void SetItem(const MyItem AItem);

}

そしてcppファイルで:

void MyClass::SetItem(const MyItem AItem)
{
   FItem = AItem;    
}

get メソッドは問題なく動作するため、除外しました。

何らかの理由で set メソッドが機能しません。

私は間違いなく、いくつかのテスト コードでプロパティに値を割り当てています。

set メソッドにブレーク ポイントを配置しようとしても、呼び出されないためにコードが最適化されているため配置されません。

Set メソッドをフィールド変数自体に置き換えると、正常に書き込まれます。

XE で提供されるすべてのドキュメントを確認しました。

コンパイラのバグかもしれないと思うほど混乱しています。

参照によって引数を渡しても違いはありません。

アイデア?

4

1 に答える 1

0

少し寝たら解決。

クラス自体を実際に設定したことはなく、クラスのメンバーを設定していたので、実際には get メソッドを使用して、返された値を調整していました。

返品を参照による返品に変更すると、問題が解決しました。

プロパティをフィールドに直接割り当てたときに機能したという事実は、コンパイラがコンパイル時にプロパティ名を単にフィールドに置き換えるためであるに違いありません。私の実際のアプリケーションには、クラスの状態に応じて設定されるさまざまなフィールドがあるため、このままにしておくことはオプションではありませんでした。

ありがとう

于 2013-01-16T19:31:51.583 に答える