2016-03-26 17 views
-2

私はRGBデータのベクトルを持っています。構造体の配列にvoid *をキャスト

vector<int> image({1,1,1, 2,2,2, 3,3,3 , 4,4,4}); 

この画像を水平に(中央の列について)反転したいと思います。

フリップ操作を実行するために、私は、だから私は

struct color{ 
    char r; 
    char g; 
    char b; 
}; 
を作成した関数私はフリップを実行したいが、RGBの個々のトリプレットを続けるだろう

flip(void* image, int rows, int cols) 

そのまま

を作成しました

を呼び出し、その関数を

int main(){ 
vector<int> image({1,1,1, 2,2,2, 3,3,3 , 4,4,4}); 
flip(&image[0],rows,cols); 
} 

でも、void *をstruct color []にキャストするとコンパイルエラーが発生します。 どうすればこの問題を回避できますか?

+2

なぜボイドポインタを使用していますか? –

+0

キャスティングステートメントを含めることはできますか? – devil0150

+0

私はstd :: copyを使ってみましたが、複雑に見えます。 –

答えて

1

C++で配列にキャストすることはできません。あなたはポインタを使用する必要があります。

struct color* image = (struct color*)arr; 

これはすぐには機能しません。 charのベクトルではなく、intのベクトルを使用する必要があります。これは、intは通常4バイト、charは1バイトであるためです。 intを構造体(3バイト)に割り当てようとすると、期待した結果が得られません。

次に、ポインタとして配列にアクセスできます。たとえば、image[0].rはベクトルの最初の値を返し、image[1].rは4番目の値を返します。ベクトルのサイズを超えないように注意してください。

0

iが

struct color{ 
int rgb[3]; 
}; 

struct color* image = (struct color*)arr; 

として構造体を変更し、無傷のRGBデータを保持する反転することができる構造体の色の配列を提供します。

関連する問題