Возвращаемое значение константного указателя в функции - PullRequest
0 голосов
/ 04 декабря 2011

Я использую const функцию-член в классе.

Вот синтаксис, который я использую:

const Grid2D<T>* GetSlice(uint32_t z) const {
   return &(GetTSlice<Grid2D<T>>(z));
}

Вот синтаксис GetTSlice

template<class G>
    G GetTSlice(uint32_t z)
    {
        return (G*)(*this)[z];
    }

'G Grid3D<T>::GetTSlice<Grid2DReloaded<T>>(uint32_t)': невозможно преобразовать указатель this из const Grid3DReloaded<T> в Grid3D<T> &

Любая идея, что я могделать неправильно?

Ответы [ 4 ]

3 голосов
/ 04 декабря 2011

Функция GetTSlice возвращает G по подписи, но вы пытаетесь вернуть G*.Либо измените тип возвращаемого значения функции на указатель, либо верните объект, в зависимости от того, что подходит для вашего предполагаемого дизайна.

2 голосов
/ 04 декабря 2011

Вы возвращаете адрес временного объекта, который будет уничтожен после выхода из функции.

Хотя добавление сообщения об ошибке или чего-то подобного может оказаться полезным.

1 голос
/ 09 декабря 2011

Чтобы добавить еще одну проблему в колоду: тип возвращаемого значения должен быть G const (или const G, если вы предпочитаете), а приведение к возвращению также должно включать в себя const приведение:

template<class G>
G const GetTSlice(uint32_t z)
{
    return *( (G const *)(*this)[z] );
}

Вышеуказанное должно решить большинство других проблем. Убедитесь, что оператор [] также const в противном случае, это будет еще одним источником попытки изменить константу.

1 голос
/ 04 декабря 2011

В дополнение к другим уже сообщенным проблемам (указатель на временный объект, G * вместо G): метод GetTSlice должен быть также const - в противном случае вы не могли бы вызвать его из методов const, таких как GetSlice.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...