void Game::timer_thread(void* arg) { bool flag1 = false; while (seconds >= 0) { int gewei, shiwei; gewei = seconds % 10; shiwei = seconds / 10; putimage(1012, 600, &number[shiwei]); putimage(1062, 600, &number[gewei]); Sleep(1000); seconds--; if (flag == true) { flag1 = true; break;//说明时间内走到了终点 } if (shengmingzhi == 0) { break; } } if (seconds < 0) { flag = false; biaoji.time = true; } if (flag1 == false) endgame(); } void Game::game() { _beginthread(&Game::key_thread, 0, NULL); _beginthread(&Game::timer_thread, 0, NULL); Sleep(10000000000000000000); }无法将参数 1 从“void(__cdecl Game::*)(void*)”转换为“_beginthread_proc_type” 1 > D:\code_container\c++大作业Maze Game\c++大作业Maze Game\Game.cpp(301, 18) : message: 没有使该转换得以执行的上下文 请问该如何修改这段代码
时间: 2024-02-14 15:05:48 浏览: 162
EASYARM2103.rar_Uart0_Timer1
这个错误提示是因为 _beginthread 函数需要的参数类型是 _beginthread_proc_type,而 Game::key_thread 和 Game::timer_thread 是成员函数,需要通过指向成员函数的指针来调用。可以将成员函数改为静态成员函数,或者使用 lambda 表达式来包装成员函数。以下是两种修改方案:
1. 将成员函数改为静态成员函数:
```
static void Game::key_thread(void* arg);
static void Game::timer_thread(void* arg);
void Game::timer_thread(void* arg) {
bool flag1 = false;
while (seconds >= 0)
{
int gewei, shiwei;
gewei = seconds % 10;
shiwei = seconds / 10;
putimage(1012, 600, &number[shiwei]);
putimage(1062, 600, &number[gewei]);
Sleep(1000);
seconds--;
if (flag == true)
{
flag1 = true;
break;//说明时间内走到了终点
}
if (shengmingzhi == 0)
{
break;
}
}
if (seconds < 0)
{
flag = false;
biaoji.time = true;
}
if (flag1 == false) endgame();
}
void Game::game() {
_beginthread(Game::key_thread, 0, NULL);
_beginthread(Game::timer_thread, 0, NULL);
Sleep(10000000000000000000);
}
```
2. 使用 lambda 表达式包装成员函数:
```
void Game::game() {
_beginthread([](void* arg) { Game::key_thread(arg); }, 0, NULL);
_beginthread([](void* arg) { Game::timer_thread(arg); }, 0, NULL);
Sleep(10000000000000000000);
}
```
以上两种修改方案均可以解决这个问题。
阅读全文