我有一个类:
ref class Coord
{
public:
property float X {
float get() { return X; }
void set( float value )
{
X = value; // THROWS EXCEPTION
}
};
property float Y {
float get() { return Y; }
void set( float value ) { Y = value; }
};
property float Z {
float get() { return Z; }
void set( float value ) { Z = value; }
};
};
我复制了一份:
Coord^ playerRotation = ref new Coord();
我尝试设置其中一个属性的值:
playerRotation->X = 0.0f;
它运行到我的类代码的这一部分:
X = value; // THROWS EXCEPTION
并抛出异常:
Unhandled exception at 0x00115299 in Game.exe: 0xC00000FD: Stack overflow (parameters: 0x00000001, 0x008E2FD0).
我在 C++/CX 属性上做错了什么
最佳答案
对C++/CX了解不多,从报错信息猜测
Stack overflow
执行 X = value;
实际上是调用 X::set()
而 X = value;
......你进入无限循环,从而导致堆栈溢出。
基于 the documentation ,您需要为 property X
定义一个后备存储变量。
ref class Coord
{
float m_x; // Backing store for property X
public:
property float X {
float get() { return m_x; }
void set( float value )
{
m_x = value;
}
};
...
您可能还想对 property Y
和 property Z
执行相同的操作。
关于C++/CX 属性在集合上抛出错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20171294/