我正在使用EasyBMP库。我有一个返回BMP*
对象的函数。 BMP对象有括号超载,在那里我可以这样做:重载的括号运算符
BMP image;
*image(x,y)->Red=0;
但现在,我想返回一个指针,我想做的事:
BMP *image;
*image(x,y)->Red=0;
,但我得到一个错误,指出图像不能用作功能。我该如何解决?
我正在使用EasyBMP库。我有一个返回BMP*
对象的函数。 BMP对象有括号超载,在那里我可以这样做:重载的括号运算符
BMP image;
*image(x,y)->Red=0;
但现在,我想返回一个指针,我想做的事:
BMP *image;
*image(x,y)->Red=0;
,但我得到一个错误,指出图像不能用作功能。我该如何解决?
BMP* image = getimageptr();
*(*image)(x,y)->Red=0;
,或者更好:
BMP* image_ptr = getimageptr();
BMP& image = *image_ptr;
*image(x,y)->Red=0;
(顺便说一句,你真的提领提领它再次访问Red
之前op()
返回的对象似乎很奇怪?!)
是的,很好地使用参考。 – 2011-04-22 00:15:07
@Jonathan:谢谢! – 2011-04-22 00:17:29
问题是,在第二个示例中,image
的类型为BMP*
,而不是BMP
;由于operator()
在BMP
上负载过重,因此在使用调用操作符之前,需要取消引用指针。
因此,我想你会需要使用:
*(*image)(x,y)->Red = 0;
我从编译器远,现在,所以你必须原谅我,如果我搞砸了。
+1你没有搞砸:) – 2011-04-22 00:15:55
我认为它最终成为(* image)(x,y).. – Snowman 2011-04-22 00:18:07
@bitmoe:你为什么这么认为? – 2011-04-22 00:22:45
请通读C++ FAQ #13.10。这个常见问题项目讨论了超载operator()
与矩阵一起使用。我相信这是你想要做的。
FAQ还显示了如何使用操作员。
顺便说一句,它被称为函数调用操作符。 – 2011-04-22 00:12:31
多么可憎的语法。 – shoosh 2011-04-22 00:32:02
@shoosh甜蜜的耶稣,你是对的! – 2011-04-22 00:33:50