C++指针和对象

Ben*_*Ben 1 c++ pointers

我有一个困难时期*,并&在下面的代码:

声明变量和调用函数:

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*)|

我做错了什么,如何解决?

Veg*_*ger 5

第一个错误:指针和对象

您需要使用指向 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没有对象*).