在 .cpp 文件中声明具有实现的 C++/CX WinRT 属性的语法是啥?

Posted

技术标签:

【中文标题】在 .cpp 文件中声明具有实现的 C++/CX WinRT 属性的语法是啥?【英文标题】:What is the syntax to declare a C++/CX WinRT property with implementation in the .cpp file?在 .cpp 文件中声明具有实现的 C++/CX WinRT 属性的语法是什么? 【发布时间】:2012-05-16 04:07:28 【问题描述】:

我有这样的课:

public ref class Test

public:
    property int MyProperty;
;

这行得通。现在我想将 MyProperty 的实现移动到 CPP 文件中。执行此操作时,我得到属性已定义的编译器错误:

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

什么是正确的语法?

【问题讨论】:

【参考方案1】:

在标题中将声明更改为:

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

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

【讨论】:

【参考方案2】:

在类定义中,需要用用户声明的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

【讨论】:

以上是关于在 .cpp 文件中声明具有实现的 C++/CX WinRT 属性的语法是啥?的主要内容,如果未能解决你的问题,请参考以下文章

如何使 cmakelists.txt 编译使用在其他地方声明和实现的函数和类的 cpp

C头文件具有相同的声明但实现不同

类方法和具有相同名称的变量,C ++中的编译错误不在Java中?

C/C++多个源文件访问同一全局变量

泛型在 C++/CX 中的工作原理

C++创建一个结构体应该放在.cpp文件中吗?然后调用的时候只要包含这个.cpp文件?