Файлы .ccp и .h/header выводят ошибку «это объявление не имеет класса хранения или спецификатора типа» с реализацией функции SendInput

Итак, моя проблема в том, что я продолжаю получать ошибку

"это объявление не имеет класса хранения или спецификатора типа"

"размер массива должен быть больше нуля"

"ожидал ";" "

Я не знаю, что случилось. Я попытался посмотреть в Интернете и не нашел конкретного решения моей проблемы, кроме общих решений, таких как определение класса для терминов в моем файле .h, но я даже не знаю, с чего начать определение «ZeroMemory» или что-то в этом роде. Вы можете видеть в моем коде, в моем Source.cpp, я закомментировал код и сделал пересечение вставки в свой файл .h. Появляется ошибка, представленная выше, и кажется, что она не скомпилируется, но будет отлично скомпилирована, если вместо этого я оставлю их в своем файле Source.cpp. Как мне это решить? Я в моем остроумии конец здесь.

Кстати, я хочу, чтобы они были в отдельном файле, который является файлом .h.

Файл Source.cpp

#include <windows.h>
#include <iostream>
#include <conio.h>
#include "Input Buttons.h" 


int main()
{
    //INPUT blocks[6], grabs[4];

    
    /*ZeroMemory(blocks, sizeof(blocks));*/
    /*ZeroMemory(grabs, sizeof(grabs));*/

    //virutal key list website
    //docs.microsoft.com/en-us/windows/win32/inputdev/virtual-key-codes


    //Setting up key/mouse input environment

    //a
    //blocks[0].type = INPUT_KEYBOARD;
    //blocks[0].ki.wVk = 0x41; //keyboard button 'a'
    //blocks[0].ki.dwFlags = KEYEVENTF_EXTENDEDKEY; //press down

    //blocks[1].type = INPUT_KEYBOARD;
    //blocks[1].ki.wVk = 0x41;
    //blocks[1].ki.dwFlags = KEYEVENTF_KEYUP; //let go



    //d
    //blocks[2].type = INPUT_KEYBOARD;
    //blocks[2].ki.wVk = 0x44; //keyboard button 'd'
    //blocks[2].ki.dwFlags = KEYEVENTF_EXTENDEDKEY;

    //blocks[3].type = INPUT_KEYBOARD;
    //blocks[3].ki.wVk = 0x44;
    //blocks[3].ki.dwFlags = KEYEVENTF_KEYUP;



    //s
    //blocks[4].type = INPUT_KEYBOARD;
    //blocks[4].ki.wVk = 0x53; //keyboard button 's'
    //blocks[4].ki.dwFlags = KEYEVENTF_EXTENDEDKEY;

    //blocks[5].type = INPUT_KEYBOARD;
    //blocks[5].ki.wVk = 0x53;
    //blocks[5].ki.dwFlags = KEYEVENTF_KEYUP;



    //i
    //grabs[0].type = INPUT_KEYBOARD;
    //grabs[0].ki.wVk = 0x49; //keyboard button 'i'
    //grabs[0].ki.dwFlags = KEYEVENTF_EXTENDEDKEY;

    //grabs[1].type = INPUT_KEYBOARD;
    //grabs[1].ki.wVk = 0x49;
    //grabs[1].ki.dwFlags = KEYEVENTF_KEYUP;



    //k
    //grabs[2].type = INPUT_KEYBOARD;
    //grabs[2].ki.wVk = 0x4B; //keyboard button 'k'
    //grabs[2].ki.dwFlags = KEYEVENTF_EXTENDEDKEY;

    //grabs[3].type = INPUT_KEYBOARD;
    //grabs[3].ki.wVk = 0x4B;
    //grabs[3].ki.dwFlags = KEYEVENTF_KEYUP;

}

Кнопки ввода.h

#pragma once

using namespace std;

INPUT blocks[6], grabs[4];

ZeroMemory(blocks, sizeof(blocks));
ZeroMemory(grabs, sizeof(grabs));


//a
blocks[0].type = INPUT_KEYBOARD;
blocks[0].ki.wVk = 0x41; //keyboard button 'a'
blocks[0].ki.dwFlags = KEYEVENTF_EXTENDEDKEY; //press down

blocks[1].type = INPUT_KEYBOARD;
blocks[1].ki.wVk = 0x41;
blocks[1].ki.dwFlags = KEYEVENTF_KEYUP; //let go

Ошибка в форме изображения с моей точки зрения

Вы знаете, что такое функция? Потому что все, что находится ниже строки INPUT blocks[6], grabs[4]; в вашем заголовке, принадлежит функции и, конечно же, нет в заголовочном файле, если оно не встроено. Я предлагаю хорошую книгу по C++. Если вы хотите распотрошить main (кстати, функцию, хоть и особенную), и переместить этот код в другую функцию, так тому и быть, но то, что вы делаете, не то.

WhozCraig 23.04.2022 05:46
3 метода стилизации элементов HTML
3 метода стилизации элементов HTML
Когда дело доходит до применения какого-либо стиля к нашему HTML, существует три подхода: встроенный, внутренний и внешний. Предпочтительным обычно...
Формы c голосовым вводом в React с помощью Speechly
Формы c голосовым вводом в React с помощью Speechly
Пытались ли вы когда-нибудь заполнить веб-форму в области электронной коммерции, которая требует много кликов и выбора? Вас попросят заполнить дату,...
Стилизация и валидация html-формы без использования JavaScript (только HTML/CSS)
Стилизация и валидация html-формы без использования JavaScript (только HTML/CSS)
Будучи разработчиком веб-приложений, легко впасть в заблуждение, считая, что приложение без JavaScript не имеет права на жизнь. Нам становится удобно...
Flatpickr: простой модуль календаря для вашего приложения на React
Flatpickr: простой модуль календаря для вашего приложения на React
Если вы ищете пакет для быстрой интеграции календаря с выбором даты в ваше приложения, то библиотека Flatpickr отлично справится с этой задачей....
В чем разница между Promise и Observable?
В чем разница между Promise и Observable?
Разберитесь в этом вопросе, и вы значительно повысите уровень своей компетенции.
Что такое cURL в PHP? Встроенные функции и пример GET запроса
Что такое cURL в PHP? Встроенные функции и пример GET запроса
Клиент для URL-адресов, cURL, позволяет взаимодействовать с множеством различных серверов по множеству различных протоколов с синтаксисом URL.
0
2
30
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

В настоящее время ваш заголовочный файл имеет "автономный" код выполнения. Это невозможно в C++ — C++ не является языком сценариев, где вы можете выполнять код в произвольных файлах.

Каждый исполняемый код должен находиться в функции. Так что вам лучше объявить прототип функции в вашем Buttons.h с необходимыми типами данных.

Затем вы создаете функцию в Buttons.cpp, где вы определять функцию с кодом, который вы хотите выполнить, скомпилировать и связать его. Затем вы можете включить Buttons.h и вызвать функцию из main()

Кнопки.ч

#include <conio.h>

void do_stuff();

Кнопки.cpp

void do_stuff() {
    INPUT blocks[6];
    INPUT grabs[4];
    //... rest of your code//
}

Источник.cpp

#include "Buttons.h" // makes do_stuff() visible in Source.cpp

int main() {
    do_stuff();
}

Спасибо, я действительно решил это. Только что создал «Buttons.h» и поместил его в структуру. Однако я поместил детали «INPUT» в первый слой структуры, а затем создал функцию с именем «do_stuff()» и поместил детали имен «INPUT» внутри функции «do_stuff()». Теперь проблема в том, как мне реализовать «SendInput»? Потому что теперь это не работает, потому что я не знаю, что поставить в первый параметр. Я попробовал «SendInput (1, playerButtons.grabs, sizeof (INPUT))», и кнопки вообще не были нажаты. Вы можете помочь мне в этом?

Moorease 23.04.2022 08:50

Другие вопросы по теме