Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Для новичков > Преобразование типов


Автор: АлексейX86 14.8.2016, 11:15
Доброго времени суток.
Есть код:
Код

class GameObject{
public:
    const Point* GetSize();

private:
    Point         size;
}


class Ship : public GameObject{
public:
Ship() {
    for(int i = 0; i <= 4; i++){
        tails[i] = Tail((const GameObject*)this);
    }
}

private:
    Tail tails[4];
}


class Tail : public GameObject{
public:
Tail(const GameObject* _from){
    from      = _from;
}

void Update(){
     const Point* fromSize = from->GetSize();  // тут ошибка
}

private:
    const GameObject* from;
}


Ошибка возникает внутри метода Update класса Tail. А именно, при попытке вызова метода GetSize из from (тип GameObject) выводит ошибку :
error C2662: GameObject::GetSize: невозможно преобразовать указатель "this" из "const GameObject" в "GameObject &".
И при вызове других методов GameObject из from тоже ошибка. Если ничего не вызывать из from, то проект успешно компилится.

Можете, пожалуйста, объяснить где я сделал ошибку. 
Спасибо.

Автор: mes 14.8.2016, 16:32
Цитата(АлексейX86 @  14.8.2016,  10:15 Найти цитируемый пост)
    const Point* GetSize();

Код

const Point* GetSize() const; //<--

Автор: bsa 16.8.2016, 16:43
АлексейX86, по сути вопроса mes уже все ответил. Я просто дополню относительно кода. Метод GetSize() должен возвращать объект Point, а не указатель на него. В крайнем случае (если объет очень большой), то константную ссылку. А потом, чисто по логике, GetSize() не может возвращать тип Point, этот тип может возвращать только метод GetLocation, а GetSize должен возвращать что-то вроде Area или Rect.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)