应用范围解析运算符会导致编译器阻塞

Applying scope resolution operator causes compiler to choke

本文关键字:编译器 范围 运算符 应用      更新时间:2023-10-16

我正在使用SDL的RenderCopy函数:

SDL_RenderCopy(Game::mRenderer, Game::mTexture, &mSourceRect, &mDestinationRect);

最后两个参数是复制图像的源和目标rect,它期望一个指向rect的指针,上面的代码像人们期望的那样工作,它们被键入为"SDL_Rect Game::mSourceRect",再一次,正如你所期望的成员变量。

每当我试图将范围解析运算符应用于传递给此函数且仅传递给此函数的rects时,我就会遇到问题:

SDL_RenderCopy(Game::mRenderer, Game::mTexture, &Game::mSourceRect, &Game::mDestinationRect);

错误是:

argument of type "SDL_Rect Game::*" is incompatible with parameter of type
 "const SDL_Rect *" SDL2Refresher

如果你检查的类型&Game::mSourceRect是,它解析为完全相同的事情,如果我不使用范围解析操作符,那么我的问题是,为什么这将导致代码不编译?

在错误列表中,它说"SDL_Rect Game::*与类型为"const SDL_Rect *"的参数不兼容",如果这有帮助的话。

我可以不使用作用域解析运算符在这两个参数上,但我习惯性地使用它,因为我整天在工作中写c#,我不断地通过它们的命名空间显式地访问它们,所以当我经常这样做时,我很难不确定它们的作用域(加上像这样显式地确定作用域并不是一件坏事,所以我想坚持使用它)。

是否可以检查&(Game::mSourceRect)作为参数是否有效?编译器错误看起来像是将类和作用域视为类型的一部分。也许如果你先计算类型(用括号),然后在括号外应用(&)的地址。