返回函数中const指针的值

时间:2011-12-03 21:04:29

标签: c++ const

我在班级中使用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 个答案:

答案 0 :(得分:3)

函数GetTSlice按签名返回G,但您尝试返回G*。将函数的返回类型更改为指针或返回一个对象,以适合您的预期设计为准。

答案 1 :(得分:2)

您将返回临时对象的地址,一旦您离开该函数,该对象将被销毁。

虽然添加错误消息或某些内容可能会有所帮助。

答案 2 :(得分:1)

除了已经报告的其他问题(指向临时对象的指针,G *而不是G): 方法GetTSlice也应该是const - 否则你无法从像GetSlice这样的const方法调用它。

答案 3 :(得分:1)

要向堆中添加一个问题:返回类型应为G const(如果您愿意,则为const G),并且返回的强制转换也应包含const强制转换:

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

以上内容应解决其他问题的大多数。检查以确保操作符[]也是const否则,这将是尝试改变常量的另一个来源。