У меня есть класс, который приблизительно походит на это:
class MeshClass
{
public:
Anchor getAnchorPoint(x, y)
{
return Anchor( this, x, y );
}
private:
points[x*y];
}
Я хочу сделать другой класс, который представляет точку "Привязки", которая может получить доступ к Сетке и изменить точку, как это:
class Anchor
{
public:
Anchor(&MeshClass, x, y)
moveAnchor(x, y);
}
Проблема состоит в том, когда я пытаюсь сделать Anchor
в MeshClass::getAnchorPoint
метод, что-то как return Anchor(this, x, y)
но потому что this
константа, я не могу. Как обходное решение, пока я не выяснил это, у меня есть Привязка, принимающая ссылку на точку, и moveAnchor перемещает точку непосредственно.
Править: Проблема была наиболее вероятной что-то немое, которое я делал с попыткой использовать Ссылку. Я изменился на использование указателя как, я обычно буду, и я могу передать в this
без жалоб от компилятора. Я почти уверен, что связывал ошибку с этим являющимся константой, но я не могу воссоздать ее так, я должен просто быть не в своем уме.
В C++ это указатель, а не ссылка. Вы можете сделать что-то вроде этого:
class Anchor; //forward declaration
class MeshClass
{
public:
Anchor getAnchorPoint(int x, int y)
{
return Anchor(*this, x, y );
}
private:
int points[WIDTH*HEIGHT];
}
class Anchor
{
public:
Anchor(MeshClass &mc, int x, int y);
}
Как вы думаете, почему это
константа? Это
указатель, а не ссылка. Разве это не должно быть return Anchor (* this, x, y);
?
Не могли бы вы изменить привязку, чтобы принять const MeshClass &
в качестве параметра или приведите this как (MeshClass)
при создании привязки?
Я не уверен, можно ли использовать const_cast
, чтобы удалить постоянство this
.
Постоянство этого не является проблемой. Сам указатель является константой, а не значением, на которое он указывает.
Настоящая проблема здесь:
class MeshClass
{
public:
Anchor getAnchorPoint(x, y)
{
return Anchor( *this, x, y );
}
private:
points[x*y];
}