Применение оператора разрешения области действия заставляет компилятор задыхаться

Я использую функцию RenderCopy SDL:

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# на работе и постоянно обращаюсь к вещам по их пространству имен, поэтому мне трудно не ограничивать область действия, когда Я делаю это так часто (плюс явное определение чего-то подобного не так уж плохо для начала, поэтому я хотел бы просто придерживаться этого).


person Trevor Hart    schedule 13.10.2016    source источник
comment
Вы случайно формируете указатель на член.   -  person T.C.    schedule 13.10.2016
comment
Является ли игра пространством имен или классом?   -  person user253751    schedule 13.10.2016
comment
Извините, игра — это класс, стоило упомянуть об этом.   -  person Trevor Hart    schedule 13.10.2016
comment
@TrevorHart -- но обычно я просто использую его, потому что весь день пишу на C# на работе -- Не используйте C# в качестве модели при написании кода на C++. Это не одни и те же языки.   -  person PaulMcKenzie    schedule 13.10.2016
comment
@PaulMcKenzie Это не модель, это привычка, и определение классов и пространств имен в C ++ на самом деле более эффективно, чем использование всего пространства имен.   -  person Trevor Hart    schedule 13.10.2016
comment
@TrevorHart Пока эта привычка не превращается в такие вещи, как использование new / new[] повсюду, когда в этом нет необходимости, и целый ряд других вещей, которые, кажется, проникают в код C ++.   -  person PaulMcKenzie    schedule 13.10.2016
comment
@PaulMcKenzie Согласен, C ++ может быть таким безумно неряшливым, и это сводит меня с ума, я делаю все возможное, чтобы все было красиво и чисто, но я ценю отзывы, спасибо!   -  person Trevor Hart    schedule 13.10.2016


Ответы (1)


Не могли бы вы проверить, работает ли &(Game::mSourceRect) в качестве аргумента? Ошибка компилятора выглядит так, как будто он рассматривает класс и область видимости как часть типа. Возможно, если вы сначала оцените тип (с скобками), затем примените адрес (&) вне скобок.

person radcore    schedule 13.10.2016
comment
Это исправило это, теперь я чувствую себя глупо из-за того, что не попробовал это: P Я приму этот ответ через 10 минут, когда смогу, спасибо! :) - person Trevor Hart; 13.10.2016