У меня есть класс:
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, но угадываю из сообщения об ошибке
Переполнение стека
выполнение X = value;
на самом деле вызывает X::set()
который, в свою очередь, X = value;
... вы переходите в бесконечный цикл и, следовательно, вызывают переполнение стека.
На основе документации вам нужно определить переменную хранилища для 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