在"{"令牌之前应使用"",""或";"(C++,无效与 windows.h)
Expected `,' or `;' before '{' token (C++, void vs. windows.h)
我正在拼命地制作一个头文件,其中包含在控制台中试验ASCII图形的函数。我的目标是简化windows.h的使用。我使用的是Dev-C++。
我写了一个void类型的初始化函数,通过使用参数和windows.h函数来设置窗口和屏幕缓冲区的大小、标题和光标的大小以及可见性。
#ifndef _KONGRA_H
#define _KONGRA_H
#include <cstdlib>
#include <iostream>
#include <windows.h>
using namespace std;
HANDLE KGconsole=GetStdHandle(STD_OUTPUT_HANDLE);
//========================================================================CURSOR
bool KGcursorvisible;
int KGcursorsize;
CONSOLE_CURSOR_INFO KGcursorstat;
//========================================================================WINDOW
int KGbuffersizex;
int KGbuffersizey;
COORD KGbuffersize;
int KGwindowsizex;
int KGwindowsizey;
SMALL_RECT KGwindowsize;
TCHAR KGconsoletitle;
void KGset(KGbuffersizex, KGbuffersizey, KGwindowsizex, KGwindowsizey, KGconsoletitle, KGcursorvisible, KGcursorsize)
{
SetConsoleTitle(KGconsoletitle);
KGcursorstat.dwSize=KGcursorsize;
KGcursorstat.bVisible=KGcursorvisible;
SetConsoleCursorInfo(KGconsole, &KGcursorstat);
KGbuffersize={KGbuffersizex, KGbuffersizey};
SetConsoleScreenBufferSize(KGconsole, KGbuffersize);
KGwindowsize={0, 0, KGwindowsizex-1, KGwindowsizey-1};
SetConsoleWindowInfo(KGconsole, TRUE, &KGwindowsize);
}
#endif
当包含整个文件时,它不断给出编译错误:
24 variable or field `KGset' declared void
25 initializer expression list treated as compound expression
25 `,' or `;' before '{' token
我找不到丢失的字符,所以我可能错误地使用了页眉。
也许这并不重要,但这里是main.cpp:
#include <cstdlib>
#include <iostream>
#include <conio.h>
#include "kongra.h"
using namespace std;
int main(int argc, char *argv[])
{
KGset(20, 20, 10, 30, "Hi", 1, 100);
getch();
return EXIT_SUCCESS;
}
由于某种原因,您在函数外部声明函数参数,就好像它们是全局对象一样。只有以下可能仍然是全局对象:
CONSOLE_CURSOR_INFO KGcursorstat;
COORD KGbuffersize;
SMALL_RECT KGwindowsize;
然后,您需要为函数参数指定类型:
void KGset(int KGbuffersizex, int KGbuffersizey, int KGwindowsizex, int KGwindowsizey, TCHAR KGconsoletitle, bool KGcursorvisible, int KGcursorsize)
全局对象(如上面的三个)是在整个程序期间存在的对象。另一方面,参数是在函数被调用时传递到函数中的对象。你需要区分这些。函数参数在函数名称后面的括号中声明。
正如Chris在下面的评论中提到的,当你开始在多个文件中包含这个头时,你会遇到违反一个定义规则的问题。原因是包含此标头的每个文件都将尝试定义这些全局变量和函数中的每一个。这导致了C++不允许的多个定义。
相反,您的头应该包含声明,而您应该有一个.cpp
文件,其中包含上面给出的定义。要将全局变量定义放入声明中,只需将extern
放在它之前。要将函数定义放入声明,请去掉正文({
到}
),并确保行以分号结束。
相关文章:
- Openssl 1.1.1d无效使用不完整的类型"struct dsa_st"
- 无法访问嵌套类.类的使用无效
- 如果用户输入无效,如何使用字符串变量-C++重复输入命令
- 如何解决错误:SCIP C++中的 SCIP 阶段无效 <10>
- 在没有参数列表的情况下使用模板名称"Event"无效,模板问题
- FFMPEG配置文件级别id大小无效
- 错误:从"int"到枚举c++的转换无效
- 如何修复此错误:className::className的无效使用
- 为什么将值返回函数传递给重载=运算符对运算符函数有效,而对其他运算符无效
- C++-模板嵌套类的引用初始化无效
- 错误:无效的预处理指令 #i 的意思是 #if?
- 多维数组 C++ 中数组下标的类型"int[int]"无效
- 在 C++ 中使用正则表达式错误时出现问题 括号表达式中的范围无效
- 从 'int' 到 'int*' CPP 的转换无效
- 如何接受 [ENTER] 键作为无效输入并发送错误消息
- 由于无效的 ValidateRgn() 子窗口不会收到WM_PAINT消息
- C++ PTHREADS - 无效转换无效*(*)()到无效*(*)(无效*)
- 声明为无效的变量或字段'...' Ardunio 编译器上的错误
- 数组下标的类型"float*[float]"无效
- 修改 std::vector 会使迭代器无效吗?