我在班级中使用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> &
”
知道我可能做错了吗?
答案 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
否则,这将是尝试改变常量的另一个来源。