0

以下の小さなコードを参照してください。

void TestPluginAPI::MouseMove(int nX, int nY)
{
    INPUT input;
    DOUBLE fScreenWidth = GetSystemMetrics( SM_CXSCREEN )-1; 
    DOUBLE fScreenHeight  = GetSystemMetrics( SM_CYSCREEN )-1; 
    int plusY;
    if (FullScreenCheck() == 1) {int plusY = getmidY() + 8.0f;}
    else {int plusY = getmidY();}
    int plusX = getmidX();
    DOUBLE fX = plusX*(65535.0f/fScreenWidth) + (nX*(65535.0f/fScreenWidth));
    DOUBLE fY = plusY*(65535.0f/fScreenHeight) + (nY*(65535.0f/fScreenHeight));

    RtlZeroMemory(&input, sizeof(input));
    input.type = INPUT_MOUSE;
    input.mi.dwFlags = MOUSEEVENTF_MOVE|MOUSEEVENTF_ABSOLUTE;
    input.mi.dx = (LONG)fX;
    input.mi.dy = (LONG)fY;

    SendInput(1, &input, sizeof(input));
}

問題は、コンパイラが未定義の警告を表示することplusYです。明らかに、コンパイルされたプラグインでこの関数を実行しようとすると(プラグインコードからのもので、ブラウザのjavascriptコンソールを介してデバッグします)、plusY定義されていないためクラッシュします。

if-else を使用して関数内の変数を定義できない場合、どうすればこれを行うことができますか?

4

5 に答える 5

4
{int plusY = getmidY() + 8.0f;}

int plusY}両方の if ステートメントで存在を停止します

int plusY括弧内は外側{}とは異なる変数ですint plusY

これを行う必要があります

int plusY;
if (FullScreenCheck() == 1) {plusY = getmidY() + 8.0f;}
else {plusY = getmidY();}
于 2013-04-01T00:04:59.447 に答える
2

の分岐の 1 つで定義された変数は、その分岐ifのスコープのみを持ちます。中括弧を削除したとしても (ここでは合法です):

if ( fullScreenCheck() == 1 )
    int plusY = getmidY() + 8.0f;
else
    int plusY = getmidY();

plusYの後にスコープが終了する になりますif

これを処理する最良の方法は次のとおりです。

int plusY = fullScreenCheck() == 1
            ? getmidY() + 8.0f
            : getmidY();

1 つの式で実行できることには制限があるため、常に実行できるとは限りませんが、実行できる場合は常に、はるかに読みやすいコードになります。

于 2013-04-01T00:20:24.013 に答える
1

if/全体elseを (スコープ規則を修正して) この 1 行に置き換えることができます。

int plusY = (FullScreenCheck() == 1) ? getmidY() + 8.0f : getmidY();
于 2013-04-01T00:14:52.567 に答える