将类型转换为指向类型的指针(SDL_Rect)

时间:2016-01-17 17:24:41

标签: c++ pointers sdl

我正在尝试将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转换为简单的地址......

2 个答案:

答案 0 :(得分:2)

为了能够使用&Shot::rectrect需要是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.rectsh2.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())