在.cpp文件中使用实现声明C ++ / CX WinRT属性的语法是什么?

时间:2012-05-07 16:28:40

标签: windows-8 windows-runtime c++-cx

我有一个这样的课程:

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

这很有效。现在我想将MyProperty的实现移动到CPP文件。我得到编译器错误,当我这样做时已经定义了属性:

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

这个的正确语法是什么?

2 个答案:

答案 0 :(得分:18)

在标题中将声明更改为:

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

大多数在线示例仅直接在类定义中显示实现。

答案 1 :(得分:4)

在类定义中,您需要将属性声明为具有用户声明的getset方法的属性;它不能是一个速记属性:

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
}