недопустимый, левый операнд имеет тип 'DWORD [29]' - PullRequest
0 голосов
/ 18 сентября 2018

Я довольно новичок в C ++, и я действительно застрял здесь.

if (bAk == 1)
{
    int fireRate = 134;

    if (shotTiming < 30)
    {
        int valueX = (AssaultRifle::recoilTableX[shotTiming] * 0.48) + shakerNum;
        int smoothingX = valueX / 5;
        int valueY = (AssaultRifle::recoilTableY[shotTiming] * 0.48) + shakerNum;
        int smoothingY = valueY / 5;
        Sleep(3);

        for (int i = 0; i < 5; i++)
        {
            mouse_move(valueX, valueY);
            Sleep(fireRate / 5);
        }
        shotTiming++;
        cout << valueX;
    }
}

Единственная ошибка сборки, которую я получаю в этот момент, - illegal, left operand has type 'DWORD [29]' Оба значения int recoilTable говорятчто пространство имен AssaultRifle должно иметь arithmetic or unscoped enum type.Я просто должен быть направлен в правильном направлении, чтобы закончить это.

#pragma once
#include <Windows.h>

namespace AssaultRifle
{
    const size_t MAX_INDEX_WEAPON = 1;
    const size_t MAX_INDEX_RECOIL = 29;
    DWORD recoilTableY[MAX_INDEX_WEAPON][MAX_INDEX_RECOIL] = {
        { 40, 48, 48, 48, 33, 33, 28, 24, 16, 13, 18, 22, 24, 29, 33, 33, 33, 29, 22, 20, 17, 17, 17, 17, 20, 27, 27, 27, 26 }
    };
    DWORD recoilTableX[MAX_INDEX_WEAPON][MAX_INDEX_RECOIL] = {
        { -36, 5, -59, -49, 3, 20, 25, 45, 43, 32, 82, 8, 43, -32, -25, -40, -35, -32, -43 , -42, -42, -55, -25, 15, 20, 35, 50, 62, 40 }
    };
}

1 Ответ

0 голосов
/ 18 сентября 2018

Ваши массивы recoilTableX и recoilTableY являются 2-мерными 1 :

DWORD recoilTableY[<# elements in first dimension>][<# elements in second dimension>] = {...};
DWORD recoilTableX[<# elements in first dimension>][<# elements in second dimension>] = {...};

Но при чтении отдельных значений из массивов ваш код индексируется только в первое измерение . Вот почему вы получаете сообщение об ошибке, так как вы не можете получить доступ ко всему массиву как к единому целому числу, как вы пытаетесь это сделать. Вы должны указать индексы для ВСЕХ доступных измерений.

Изменить это:

AssaultRifle::recoilTableX[shotTiming]
AssaultRifle::recoilTableY[shotTiming]

На это вместо:

AssaultRifle::recoilTableX[0][shotTiming]
AssaultRifle::recoilTableY[0][shotTiming]

MAX_INDEX_WEAPON равно 1, поэтому в первом измерении массивов есть только 1 слот, поэтому ЕДИНСТВЕННЫЙ допустимый индекс в первом измерении равен 0, что делает первое измерение довольно бесполезным и должно быть удалено, если только вы не Планирование добавления значений для дополнительного оружия в будущем.

MAX_INDEX_RECOIL равно 29, поэтому во втором измерении массивов имеется 29 слотов, поэтому ЕДИНСТВЕННЫЕ допустимые индексы во втором измерении включают 0..28 включительно, но ваш код позволяет получить доступ к индексу 29.

NAMES ваших MAX_INDEX_WEAPON и MAX_INDEX_RECOIL констант вводят в заблуждение, так как на самом деле они вообще не используются в качестве индексов.

1: также, ваши массивы должны быть объявлены как const.

Попробуйте вместо этого:

#pragma once
#include <Windows.h>

namespace AssaultRifle
{
    const size_t MAX_WEAPONS = 1;
    const size_t MAX_RECOILS = 29;
    const int recoilTableY[MAX_WEAPONS][MAX_RECOILS] = {
        { { 40, 48, 48, 48, 33, 33, 28, 24, 16, 13, 18, 22, 24, 29, 33, 33, 33, 29, 22, 20, 17, 17, 17, 17, 20, 27, 27, 27, 26 } }
    };
    const int recoilTableX[MAX_WEAPONS][MAX_RECOILS] = {
        { { -36, 5, -59, -49, 3, 20, 25, 45, 43, 32, 82, 8, 43, -32, -25, -40, -35, -32, -43 , -42, -42, -55, -25, 15, 20, 35, 50, 62, 40 } }
    };
}

if (bAk == 1)
{
    int fireRate = 134;

    if (shotTiming < AssaultRifle::MAX_RECOILS)
    {
        int valueX = (AssaultRifle::recoilTableX[0][shotTiming] * 0.48) + shakerNum;
        int smoothingX = valueX / 5;
        int valueY = (AssaultRifle::recoilTableY[0][shotTiming] * 0.48) + shakerNum;
        int smoothingY = valueY / 5;
        Sleep(3);

        for (int i = 0; i < 5; i++)
        {
            mouse_move(valueX, valueY);
            Sleep(fireRate / 5);
        }
        shotTiming++;
        cout << valueX;
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...