2016-09-23 1 views
0

私は現在、テトリスのゲームを作成しようとしていると私はこれを呼び出すとき:C++ COORDエラー

C4838 - SHORT」から 'int型からの変換:

void PrintChar(int x, int y, char ch, Colors color) { 
    COORD c = { y,x }; 

    FillConsoleOutputCharacterW(GameData::handle, ch, 1, c, NULL); 
    FillConsoleOutputAttribute(GameData::handle, color, 1, c, NULL); 
} 

この警告はアップします狭義の変換が必要です( )。

誰かがここで何が起こっているのかを説明してください。小さな例が大いに評価されるでしょうか。

+1

警告は、 'COORD'のコンテキストが何であるかを知っていれば、はっきりしているはずです。 –

+0

とすると、 'COORD c = {(short)x、(short)y};' ?? – RelientFX

+0

実際に 'COORD'とは何ですか? –

答えて

1

あなたはcopy-list-initialization、暗黙の(潜在的に)非可逆変換を防ぐC++ 11に導入された言語機能を使用している

COORD c = { static_cast<short>(x), static_cast<short>(y) }; 
0

明示的な型キャストを使用する必要があります。 C++ 11準拠のコンパイラでは、この構造体は実際にerror(警告だけでなく)を生成するはずです。

一つの可能​​な解決策は、あなたが入力先の型の範囲をオーバーフローしないことを知っていれば、(ボーナスとして直接リストの初期化で)static_castを使用することです:

COORD c{ static_cast<SHORT>(x), static_cast<SHORT>(y) }; 


Visual Studioは、潜在的に損失のあるナローイング変換がある場合に備えて、コンパイル時には評価できないため、warning C4838を発行します。定数式の変換が狭くなると情報が失われるため、代わりにerror C2397が発行されます。私はこれがC++ 11およびC++ 14に準拠しているかどうかは分かりませんが、

関連する問題