我正在使用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