Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/haskell/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++指针和对象_C++_Pointers - Fatal编程技术网

C++指针和对象

C++指针和对象,c++,pointers,C++,Pointers,在以下代码中,我很难使用*和(&D): 声明变量和调用函数: SDL_Event event; myfunc(event); 功能: void MyApp::myfunc(SDL_Event* event) { while ( SDL_PollEvent(&event) ) { if (event.type == SDL_QUIT) { // ... } } } 编译器: 错误:调用“MyApp::myfun

在以下代码中,我很难使用*和(&D):

声明变量和调用函数:

SDL_Event event;
myfunc(event);
功能:

void MyApp::myfunc(SDL_Event* event) {
    while ( SDL_PollEvent(&event) ) {
        if (event.type == SDL_QUIT) { 
            // ...
        }
    } 
}
编译器: 错误:调用“MyApp::myfuncSDL\u事件&”时没有匹配的函数 注意:候选项为:void MyApp::myfuncSDL_Event*|

我做错了什么?如何修复?

第一个错误:指针和对象 您需要使用指向SLD_事件对象的指针调用myfunc,而不是使用SLD_事件对象本身调用:

myfunc(&event);
在对象或变量前面加一个&告诉编译器您需要对象的内存地址,即所谓的指向它的指针

在指向对象的指针前面放一个*会告诉编译器,您需要指针指向的内存地址的内容,即对象或变量本身

您得到的编译器错误表明编译器无法找到名为myfunc的函数,该函数接受对SLD_事件对象的引用。这是正确的,因为唯一可用的myfunc函数需要指向SLD_事件对象的指针作为其参数

第二个错误:指针指向指针 独立于第一个编译器错误的第二个错误:无法将参数“1”的“SDL\U事件**”转换为“SDL\U事件*”,从而将参数“1”转换为“int-SDL\U-PollEvents*”,说明您输入SLD\U-PollEvent函数的变量类型与预期类型不兼容,无法自动转换

因为在该函数调用中的事件变量之前添加了一个&,所以基本上要求获取指向事件对象的内存位置的指针。这是完全合法的C代码,但不是您想要的,因为SLD_EventPoll函数需要类型为SLD_event*的事件对象的指针

因此,要解决第二个错误,请将行更改为:

while ( SDL_PollEvent(event) ) {
请注意已删除的&

第三个错误:在指向对象的指针中寻址对象变量 代码中的第三个错误是event.type。因为事件是SLDDEVER对象的指针,C++希望A- >而不是。用于对象,即没有*

第一个错误的SLD_事件:指针和对象 您需要使用指向SLD_事件对象的指针调用myfunc,而不是使用SLD_事件对象本身调用:

myfunc(&event);
在对象或变量前面加一个&告诉编译器您需要对象的内存地址,即所谓的指向它的指针

在指向对象的指针前面放一个*会告诉编译器,您需要指针指向的内存地址的内容,即对象或变量本身

您得到的编译器错误表明编译器无法找到名为myfunc的函数,该函数接受对SLD_事件对象的引用。这是正确的,因为唯一可用的myfunc函数需要指向SLD_事件对象的指针作为其参数

第二个错误:指针指向指针 独立于第一个编译器错误的第二个错误:无法将参数“1”的“SDL\U事件**”转换为“SDL\U事件*”,从而将参数“1”转换为“int-SDL\U-PollEvents*”,说明您输入SLD\U-PollEvent函数的变量类型与预期类型不兼容,无法自动转换

因为在该函数调用中的事件变量之前添加了一个&,所以基本上要求获取指向事件对象的内存位置的指针。这是完全合法的C代码,但不是您想要的,因为SLD_EventPoll函数需要类型为SLD_event*的事件对象的指针

因此,要解决第二个错误,请将行更改为:

while ( SDL_PollEvent(event) ) {
请注意已删除的&

第三个错误:在指向对象的指针中寻址对象变量 代码中的第三个错误是event.type。因为事件是SLDDEVER对象的指针,C++希望A- >而不是。函数定义中的*表示它采用SDL_事件的地址。所以你需要给它一个:

SDL_Event event;
myfunc(&event);
函数定义中的*表示它接受SDL_事件的地址。所以你需要给它一个:

SDL_Event event;
myfunc(&event);
myfunc方法采用指向SDL_事件的指针,即SDL_事件*,而不是SDL_事件实例。试着做:

SDL_Event event;
myfunc(&event);
还请注意,除非SDL_PollEvent需要SDL_Event**类型的参数,否则不需要&there。您只需执行以下操作:

while ( SDL_PollEvent(event) ) {

    if (event->type == SDL_QUIT) { 
        // ...
    }
} 
…因为您已经有了指向SDL_事件的指针。另外请注意,我已将event.type替换为event->type也有效为*event.type。因为事件在此点是一个指针,所以访问实际SDL_事件实例的类型字段的唯一方法是首先取消对指针的引用。这就是->和*运算符为您所做的。

myfunc方法获取指向SDL_事件的指针,即SDL_事件*,而不是SDL_事件实例。试着做:

SDL_Event event;
myfunc(&event);
还要注意,除非SDL_PollEvent需要一个参数o f类型SDL_事件**您不需要&there。您只需执行以下操作:

while ( SDL_PollEvent(event) ) {

    if (event->type == SDL_QUIT) { 
        // ...
    }
} 

…因为您已经有了指向SDL_事件的指针。另外请注意,我已将event.type替换为event->type也有效为*event.type。因为事件在此点是一个指针,所以访问实际SDL_事件实例的类型字段的唯一方法是首先取消对指针的引用。这是->和*运算符为您所做的。

您还需要取消对指针的引用:

if (event->type == SDL_QUIT) { 
    // ...
}
我不知道,但我想SDL_PollEvent也会接受一个指针,所以这就是:

SDL_PollEvent(event);

您还需要取消对指针的引用:

if (event->type == SDL_QUIT) { 
    // ...
}
我不知道,但我想SDL_PollEvent也会接受一个指针,所以这就是:

SDL_PollEvent(event);
我看到两件事:

首先,您没有向myFunc传递定义所期望的指针。你应该:

将事件声明为指针或 使用&event将事件地址传递给myFunc。 第二个问题是:

while ( SDL_PollEvent(&event) )
名为event的参数是指针。运算符的地址&对于将指针传递到SDL_PollEvent不是必需的。实际上,如果SDL_PollEvent需要一个指针,那么在此上下文中使用的地址是错误的。事件已经是指针。使用的地址表示指针的地址或指向指针的指针。

我看到两件事:

首先,您没有向myFunc传递定义所期望的指针。你应该:

将事件声明为指针或 使用&event将事件地址传递给myFunc。 第二个问题是:

while ( SDL_PollEvent(&event) )

名为event的参数是指针。运算符的地址&对于将指针传递到SDL_PollEvent不是必需的。实际上,如果SDL_PollEvent需要一个指针,那么在此上下文中使用的地址是错误的。事件已经是指针。通过使用address of,你说的是指针的地址,或者是指向指针的指针。

我试过了,但编译器的响应是:错误:无法将参数“1”的“SDL_Event**”转换为“SDL_Event*”,而参数“1”转换为“int-SDL_-PollEventSDL_Event*”?@Ben-参见我答案的第二部分,它涵盖了这一部分。@Ben,这是另一个错误。所以你解决了第一个问题,现在你需要解决第二个问题。更新了我对第二个和第三个错误的回答抱歉,对于第三个错误没有详细的描述,因为它只是一个定义,两者之间的区别背后没有更深的含义。据我所知。除了指针/对象的差异,我已经尝试过了,但编译器的响应是:错误:无法将参数“1”的“SDL_事件**”转换为“SDL_事件*”,转换为“int-SDL_-PollEventSDL_事件*”?@Ben-请参阅我答案的第二部分,它涵盖了该部分。@Ben,这是另一个错误。所以你解决了第一个问题,现在你需要解决第二个问题。更新了我对第二个和第三个错误的回答抱歉,对于第三个错误没有详细的描述,因为它只是一个定义,两者之间的区别背后没有更深的含义。据我所知。除了指针/对象的差异谢谢!以前我经常出错,但现在使用->它可以工作了:谢谢!我以前一直犯错误,但现在使用->it works:你能改进你的问题标题,使其真正描述问题吗?你能改进你的问题标题,使其真正描述问题吗。