.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();
}
所以我的问题是我不断收到错误
“此声明没有存储 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();
}