8

私はこのようなクラスを持っています:

public ref class Test
{
public:
    property int MyProperty;
};

これは機能します。ここで、MyProperty の実装を CPP ファイルに移動したいと考えています。これを行うと、プロパティが既に定義されているというコンパイラ エラーが発生します。

int Test::MyProperty::get() { return 0; }

これの適切な構文は何ですか?

4

2 に答える 2

19

ヘッダーで、宣言を次のように変更します。

public ref class Test
{
public:
    property int MyProperty
    {
        int get();
        void set( int );
    }
private:
    int m_myProperty;
};

次に、cppコードファイルに次のように定義を記述します。

int Test::MyProperty::get()
{
    return m_myProperty;
}
void Test::MyProperty::set( int i )
{
    m_myProperty = i;
}

エラーが表示される理由は、コンパイラが実装を生成する簡単なプロパティを宣言したためです。しかし、その後、実装も明示的に提供しようとしました。参照: http: //msdn.microsoft.com/en-us/library/windows/apps/hh755807 (v = vs.110).aspx

オンラインの例のほとんどは、クラス定義に直接実装を示しているだけです。

于 2012-05-07T16:36:22.050 に答える
4

getクラス定義では、プロパティをユーザー宣言とsetメソッドを使用してプロパティとして宣言する必要があります。省略形のプロパティにすることはできません。

public ref class Test
{
public:

    property int MyProperty { int get(); void set(int); }
};

次に、cppファイルでメソッドget()set()メソッドを定義できます。

int Test::MyProperty::get()
{
    return 42;
}

void Test::MyProperty::set(int)
{ 
    // set the value
}
于 2012-05-07T16:33:00.360 に答える