C++ с помощью 'этого' в качестве параметра

У меня есть класс, который приблизительно походит на это:

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 без жалоб от компилятора. Я почти уверен, что связывал ошибку с этим являющимся константой, но я не могу воссоздать ее так, я должен просто быть не в своем уме.

7
задан Winder 26 February 2010 в 00:08
поделиться

4 ответа

В 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);
}
10
ответ дан 6 December 2019 в 19:36
поделиться

Как вы думаете, почему это константа? Это указатель, а не ссылка. Разве это не должно быть return Anchor (* this, x, y); ?

1
ответ дан 6 December 2019 в 19:36
поделиться

Не могли бы вы изменить привязку, чтобы принять const MeshClass & в качестве параметра или приведите this как (MeshClass) при создании привязки? Я не уверен, можно ли использовать const_cast (this) , чтобы удалить постоянство this .

0
ответ дан 6 December 2019 в 19:36
поделиться

Постоянство этого не является проблемой. Сам указатель является константой, а не значением, на которое он указывает.

Настоящая проблема здесь:

class MeshClass
{
public:
    Anchor getAnchorPoint(x, y)
    { 
       return Anchor( *this, x, y );
    }
 private:
     points[x*y];
}
2
ответ дан 6 December 2019 в 19:36
поделиться
Другие вопросы по тегам:

Похожие вопросы: