Как получить доступ к приватным членам класса из статического метода?

Так объявляется переменная в моем классе:
private:
	HDC hdc;

А вот так - статический метод:
static LRESULT CALLBACK WndProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)

Когда в этом методе пытаюсь обратиться к упомянутой переменной вот так
hdc = GetDC(hwnd);
возникает ошибка "нестатическая ссылка на член должна указываться относительно заданного объекта". Как обратиться к этой переменной? В Гугле такая ошибка встречается часто, но совершенно в другом контексте, так что ничего похожего найти не смог.
  • Вопрос задан
  • 2751 просмотр
Пригласить эксперта
Ответы на вопрос 5
LittleFatNinja
@LittleFatNinja
горе девелопер, любитель лютой садомии
AxisPod
@AxisPod
Вы из статического метода пытаетесь взять нестатический член, которого и в природе-то не существует без объекта, а у вас объекта и нет. Тут проблема не в private. Прокидывайте каким-нить образом в статический метод объект, а там уже получайте. Да и в ошибке вам именно это и написали.
Ответ написан
Комментировать
Rou1997
@Rou1997
Неважно приватные члены или нет, важно статические они или нет, если они статические как и метод, то никаких проблем, а если нет, то либо примените паттерн singleton и т.п., либо доступ к памяти (низкоуровневый "трюк", по сути тот же singleton).
Ответ написан
Статические методы не применяются к объекту класса, они существуют отдельно от объектов, поэтому не имеют доступа к любым нестатическим членам класса. Если вы хотите использовать свойство конкретного объекта - вы должны в явном виде передать ссылку на этот объект в статический метод (что в общем-то не имеет смысла, разуменый сделать метод не статическим)
Ответ написан
Комментировать
@koronabora
Человек
Необходимо разнести статические методы и переменные по разным классам. В классе для переменных сделать обертки для доступа к ним, и этот класс с переменными отдавать указателем в статический метод.

Грубо говоря, экземпляры класса и статические методы лежат в разных областях памяти. Если еще грубее, то статические методы не принадлежат никакому экземпляру класса, но, в то-же самое время, доступны в своей области видимости любому.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы