我有一个困难时期*,并&在下面的代码:
声明变量和调用函数:
SDL_Event event;
myfunc(event);
Run Code Online (Sandbox Code Playgroud)
功能:
void MyApp::myfunc(SDL_Event* event) {
while ( SDL_PollEvent(&event) ) {
if (event.type == SDL_QUIT) {
// ...
}
}
}
Run Code Online (Sandbox Code Playgroud)
编译器:错误:没有匹配函数来调用'MyApp :: myfunc(SDL_Event&)'注意:候选者是:void MyApp :: myfunc(SDL_Event*)|
我做错了什么,如何解决?
您需要使用指向 SLD_Event对象的指针调用myfunc ,而不是使用SLD_Event对象本身调用:
myfunc(&event);
Run Code Online (Sandbox Code Playgroud)
放在&对象(或变量)前面告诉编译器你想要对象的内存地址(这是所谓的指向它的指针).
把一个*在一个指向对象的前告诉您想要的存储器地址,其中该内容的编译器的指针点(它是对象或变量本身)
您得到的编译器错误告诉编译器无法找到名为myfunc的函数,该函数接受(引用)SLD_Event对象.这是正确的,因为(仅)myfunc函数可用需要指向SLD_Event对象的指针作为其参数.
您获得的第二个(独立于第一个)编译器错误(error: cannot convert 'SDL_Event**' to 'SDL_Event*' for argument '1' to 'int SDL_PollEvent(SDL_Event*)')告诉您放入SLD_PollEvent函数的变量类型与预期类型不兼容,并且无法自动转换.
因为您在该函数调用中&的event变量之前添加了一个,所以您基本上要求获取指向事件对象的内存位置的指针.这是完全合法的C代码,但不是你想要的,因为SLD_EventPoll函数期望指针是事件对象(具有类型SLD_Event *).
所以要解决你的第二个错误,将该行改为:
while ( SDL_PollEvent(event) ) {
Run Code Online (Sandbox Code Playgroud)
(注意删除&)
代码中的第三个错误是event.type.因为事件是SLD_Event对象的指针,所以C++期望->代替.(用于对象,即SLD_Event没有对象*).