2010-12-20 11 views
1

Android NDKからC++アームの変換エラーが狭くなりました。Android NDKからC++アームで変換の変換エラーが発生しました

int16_t ax = li.A.x, ay = li.A.y; 
int16_t bx = li.B.x, by = li.B.y; 
Rect16 rcA = { ax - 8, ay - 8, ax + 8, ay + 8 }; 
Rect16 rcB = { bx - 8, by - 8, bx + 8, by + 8 }; 

そして試みをコンパイルするとき、このエラーが出る:

は、次のコードをお持ちの

error: narrowing conversion of '(((int)ay) + -0x00000000000000008)' from 'int' to 'int16_t' inside { } 

Rect16構造体:

typedef struct tagRect16 { 
    int16_t left, top, right, bottom; 
} Rect16; 
+0

質問は何ですか? Rect16はどのように宣言されていますか? – ognian

+0

このエラーを取り除くには、私は何をする必要があるのですか? –

答えて

1

をあなたに問題があるという事実から茎式ay - 8では、コンパイラはint operator-(int, int)と呼んでいると言います。コンパイラには、this questionのようなメソッドを使用して、shortが8であることを伝える必要があります。

+0

ええ、私はint16_t eight = 8を定義しようとします。それを使用しますが、成功しません - コンパイラはそれをintにキャストします。コンパイラは両方の引数をintにキャストします。 –

+0

その場合、 '(int16_t)(ay-8)'のように明示的に結果をキャストしています。基本的に、エラーは「ここに変換がありますが、一部の値ではデータが失われる可能性があるので、教えてください」と言っています。場合によっては(ここのように)修正するのは結果をキャストすることですが、実際に意図した機能が呼び出されるように引数を変更することが時々あります。 –

+0

それは動作します!しかし、なぜ?明示的な仕事と暗黙のない?コンパイラは私が変換について知っていると仮定し、そこにエラーを意味しない? –