.ccp 和.h/ 头文件输出错误 'this declaration has no storage class or type specifier' with implementation of SendInput function

The .ccp and .h / header files output error 'this declaration has no storage class or type specifier' with implementation of SendInput function

所以我的问题是我不断收到错误

“此声明没有存储 class 或类型说明符”

“数组的大小必须大于零”

" 期待一个 ';' “

我不知道怎么了。我试图在网上查找,但除了通用解决方案(例如为我的 .h 文件中的术语定义 class 之类的通用解决方案外,没有找到针对我的问题的具体解决方案,但我什至不知道从哪里开始定义 '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;

}

输入Buttons.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

Error in image form from my perspective

按照目前的情况,您的头文件具有“独立的”执行代码。 这在 C++ 中是不可能的 - C++ 不是一种脚本语言,您可以在其中执行任意文件中的代码。

每个可执行代码都需要在一个函数中。 因此,您最好在 Buttons.h 中使用必要的数据类型声明一个函数原型。

然后您在 Buttons.cpp 中创建一个函数,您可以在其中 定义 使用您要执行和编译的代码的函数并 link 它。然后您可以包含 Buttons.h 并从 main()

调用该函数

Buttons.h

#include <conio.h>

void do_stuff();

Buttons.cpp

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

Source.cpp

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

int main() {
    do_stuff();
}