2012-05-07 20 views
8

Tôi có một lớp học như sau:Cú pháp khai báo thuộc tính WinRT C++/CX với việc thực hiện trong tệp .cpp là gì?

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

Tác phẩm này. Bây giờ tôi muốn di chuyển việc triển khai MyProperty thành tệp CPP. Tôi nhận được lỗi trình biên dịch rằng thuộc tính đã được xác định khi tôi thực hiện việc này:

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

Cú pháp thích hợp cho điều này là gì?

Trả lời

18

Trong tiêu đề thay đổi việc kê khai để:

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

Sau đó, trong tệp mã cpp viết định nghĩa của bạn như sau:

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

Lý do bạn gặp lỗi là bạn đã khai báo thuộc tính tầm thường nơi trình biên dịch tạo ra một triển khai cho bạn. Nhưng, sau đó bạn đã cố gắng cung cấp một cách thực hiện rõ ràng. Xem: http://msdn.microsoft.com/en-us/library/windows/apps/hh755807(v=vs.110).aspx

Hầu hết các ví dụ trực tuyến chỉ hiển thị các triển khai trực tiếp trong định nghĩa lớp.

4

Trong định nghĩa lớp, bạn cần khai báo thuộc tính dưới dạng thuộc tính với phương thức getset do người dùng khai báo; nó không thể là một tài sản viết tắt:

public ref class Test 
{ 
public: 

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

Sau đó, trong tập tin cpp bạn có thể xác định get()set() phương pháp:

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

void Test::MyProperty::set(int) 
{ 
    // set the value 
} 
Các vấn đề liên quan