2011-04-22 19 views
0

私はEasyBMPライブラリを使用しています。私はBMP*オブジェクトを返す関数を持っています。 BMPオブジェクトは、私が行うことができますオーバーロードされた括弧、持っている:オーバーロードされた括弧演算子

BMP image; 
*image(x,y)->Red=0; 

をしかし、今、私はポインタを返すようにしようとしていることを、私がやりたい:

BMP *image; 
*image(x,y)->Red=0; 

が、私はそれを言ってエラーが出ますイメージを関数として使用することはできません。これをどうやって解決するのですか?

+1

ところで、これは関数呼び出し演算子と呼ばれています。 –

+3

構文の忌み嫌い。 – shoosh

+0

@shoosh甘いイエス様、そうですよ! –

答えて

6
BMP* image = getimageptr(); 
*(*image)(x,y)->Red=0; 

または、おそらくより良い:

BMP* image_ptr = getimageptr(); 
BMP& image = *image_ptr; 
*image(x,y)->Red=0; 

(?ところで、あなたは本当にRedにアクセスするために再びそれを逆参照する前にop()によって返され、そのオブジェクトを参照解除奇妙に思えるん!)

+2

はい、よく参照を使用して演奏しました。 –

+0

@Jonathan:ありがとう! –

3

問題は、2番目の例では、imageBMP*であり、BMPではないことです。 operator()BMPにオーバーロードされているため、コールオペレータを使用する前にポインタを逆参照する必要があります。したがって

、私はあなたが使用する必要がありますと思う:

*(*image)(x,y)->Red = 0; 

私は今すぐ、コンパイラからので、私はめちゃくちゃ場合は、私を許しする必要があります。

+1

+1あなたはうんざりしていない:) –

+0

私はそれが終わったと思う(*イメージ)(x、y).. – Snowman

+1

@bitmoe:なぜそれを考えるのですか? –

0

C++ FAQ #13.10を読んでください。このFAQ項目では、マトリックスで使用するためにoperator()のオーバーロードについて説明します。私はこれがあなたがしたいことだと信じています。

よくある質問は、オペレータの使い方も示しています。