gpt4 book ai didi

c++ - 如何使用具有属性的类在 C++/CX 中创建复制构造函数

转载 作者:搜寻专家 更新时间:2023-10-31 01:53:05 25 4
gpt4 key购买 nike

我是 C++/CX 的新手。我想创建一个具有两个属性 X 和 Y 的 Vector 类。

在标准 C++ 中,复制构造函数是:

Vector(const Vector& v);

我将其转换为 C++/CX 为:

Vector(const Vector^ v);

这是类:

标题:

ref class Vector
{
public:
Vector();
Vector(const Vector^ v);

property double X;
property double Y;
};

实现:

Vector::Vector()
{
X = 0;
Y = 0;
}

Vector::Vector(const Vector^ v)
{
this->X = v->X;
this->Y = v->Y;
}

但是当我将 v->X 分配给 this->X 时我得到了一个错误:函数“Vector::X::get”的实例没有匹配参数列表和对象(对象作为类型限定符阻止匹配).

如何正确实现拷贝构造函数?

谢谢。

最佳答案

您的问题与复制构造函数没有直接关系。当我编译您的代码时,出现以下错误:

'Vector::X::get' : cannot convert 'this' pointer from 'const Vector' to 'Vector %'

这表明问题出在 const-ness 上,参见示例 this question及其接受的答案。

似乎问题在于对于普通属性,get 访问器未声明为 const。因此,您无法访问 const Vector^ 上的属性。

我认为一个解决方案是不使用琐碎的属性,而是自己实现两个访问器,使 get 访问器 const:

private:
double x;
double y;
public:
property double X
{
double get() const { return x; }
void set(double value) { x = value; }
}

property double Y
{
double get() const { return y; }
void set(double value) { y = value; }
}

这种方法的问题是您不能在 WinRT 类型中使用 const 方法(我认为这就是为什么 get 访问器不是 const 在普通属性中)。因此,如果您将类型更改为 public ref class,您将收到此错误:

'get': 'const' and 'volatile' qualifiers on member functions of WinRT types are not supported

因此,我认为最好的选择是不要在复制构造函数中使用 const:

Vector::Vector(Vector^ v)
{
this->X = v->X;
this->Y = v->Y;
}

虽然我不确定为什么您甚至需要为 ref class 复制构造函数,因为您总是将它用作引用。

关于c++ - 如何使用具有属性的类在 C++/CX 中创建复制构造函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11599154/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com