我正在尝试将SDL_Rect
传递给SDL_RenderCopy
,这需要SDL_Rect
的地址。我有SDL_Rect
我试图传递存储在Shot.h
文件中的私有类(称为“Shot”)变量。
这一切都发生在Shot.cpp
我的做法:
SDL_RenderCopy(other args..., &Shot::rect)
然而,视觉工作室抱怨说
"argument of type SDL_Rect Shot::* is incompatible with param of type const SDL_Rect *"
我确实理解错误,但无法完全了解如何将Shot::rect
转换为简单的地址......
答案 0 :(得分:2)
为了能够使用&Shot::rect
,rect
需要是static member
类的Shot
。
要将指针传递给non-static
成员,可以使用以下命令:
Shot sh;
SDL_RenderCopy(other args..., &sh.rect);
否则,无法知道使用哪个rect
对象Shot
。
如果要将类的成员传递给函数,该函数将需要知道它必须使用该类的哪个对象。
因此,您必须在上面的示例中传递将使用rect
作为参数&sh.rect
的一部分的对象。
如果使用&Shot::rect
,则不知道使用哪个对象,因此rect
需要是静态成员。这样,该类的所有对象只有一个rect
。
例如,如果有多个class Shot
对象:
Shot sh1;
Shot sh2;
该函数需要知道使用哪个矩形:sh1.rect
或sh2.rect
。
如果从SDL_RenderCopy()
内调用class Shot
(或者是成员函数),rect
可以像这样直接传递:
SDL_RenderCopy(other args..., &rect);
答案 1 :(得分:2)
您无法获取类变量的地址,除非它是静态的。我假设您要创建类Shot
的对象,然后获取其成员的地址。最优雅的方法是为此编写一个合适的方法。
class Shot {
protected:
SDL_Rect rect;
public:
SDL_Rect const *getRect(void) const { return ▭ }
};
然后你可以使用:
Shot *shot = new Shot;
SDL_RenderCopy(other args..., shot->getRect())