【问题标题】:Applying scope resolution operator causes compiler to choke应用范围解析运算符会导致编译器阻塞
【发布时间】:2017-02-22 00:49:12
【问题描述】:

我正在使用 SDL 的 RenderCopy 功能:

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

最后两个参数是复制图像的源矩形和目标矩形,它需要一个指向矩形的指针,上面的代码按预期工作,它们的类型为“SDL_Rect Game::mSourceRect ",再次,正如您对成员变量所期望的那样。

每当我尝试将范围解析运算符应用于矩形时,当它们传递给此函数且仅此函数时,我都会遇到问题:

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 是命名空间还是类?
  • 对不起,Game 是一个类,应该提到的。
  • @TrevorHart -- 但我习惯性地只是使用它,因为我整天在工作中编写 C# -- 不要使用 C# 作为编写 C++ 代码的模型。它们不是同一种语言。
  • @PaulMcKenzie 这不是一个模型,而是一种习惯,在 C++ 中定义类和命名空间实际上比使用整个命名空间更有效。

标签: c++ pointers sdl-2 scope-resolution


【解决方案1】:

您能否检查一下 &(Game::mSourceRect) 作为参数是否有效?编译器错误看起来像是将类和范围视为类型的一部分。也许如果您首先评估类型(使用括号),然后在括号外应用 (&) 的地址。

【讨论】:

  • 解决了这个问题,现在我觉得有点愚蠢,因为我没有尝试过:P 我会在 10 分钟内接受这个答案,谢谢! :)
猜你喜欢
  • 2012-04-20
  • 2014-02-08
  • 2010-09-09
  • 2016-07-26
  • 2010-10-01
  • 2014-10-05
  • 2015-12-18
  • 2015-11-18
  • 2018-04-24
相关资源
最近更新 更多