定义运算符
RGBAPixel * operator()(size_t x, size_t y);
RGBAPixel const * operator()(size_t x, size_t y) const;
我应该如何在const函数中调用它? (那个png在底部)
PNG Quadtree::decompress() const
{
PNG * png = new PNG((size_t) res, (size_t) res);
decompressHelper(png,0,0,res/2,root);
return * png;
}
void Quadtree::decompressHelper(PNG * png, int x, int y, int setresolution, QuadtreeNode * subRoot) const
{
if (subRoot->nwChild == NULL) {
png((size_t) x, (size_t) y) = subRoot->element;
答案 0 :(得分:0)
只需将运算符重载定义为const:
RGBAPixel * operator()(size_t x, size_t y) const;
^~~~~
由于你通过指针传递,你应该在通话之前取消引用它(不要忘记取消引用):
*(*png)((size_t) x, (size_t) y) = subRoot->element;
^^ ^
它实际上不是函数指针,而是指向可用作函数的类对象的指针。但这是一个微妙的差异。
我还建议更改此功能以防止潜在的内存泄漏:
PNG Quadtree::decompress() const
{
PNG png((size_t) res, (size_t) res);
decompressHelper(&png, 0, 0, res/2, root);
return png;
}
您不是delete
- 您使用new
分配的内容。