Указатель адреса дает 1 вместо шестнадцатеричного адреса - PullRequest
0 голосов
/ 03 апреля 2012

Я пытаюсь сделать так, чтобы у меня был один объект с указателем, чтобы несколько классов могли работать с одним и тем же объектом.Но единственное, что он мне дает, это 1 вместо шестнадцатеричного адреса, который мне нужен.Мой код:

код для его создания:

SDL_Event event;
EventHandler eh(&event);

код с его использованием:

EventHandler::EventHandler(SDL_Event* eventpointer)
{
    EventHandler::event = eventpointer;
    //This code is to test the pointer:
    std::cout << &EventHandler::event << std::endl;
}

вывод:

1
Process returned 0 (0x0)    execution time : 0.092 s

1 Ответ

3 голосов
/ 03 апреля 2012

Попробуйте напечатать значение события, а не его адрес:

std::cout << EventHandler::event << std::endl;

На самом деле в вашем тестовом наборе есть несколько необычных вещей.Исправляя все из них, я получаю следующее:

EventHandler::EventHandler(SDL_Event* eventpointer) : event(eventpointer)
{
  //This code is to test the pointer:
  std::cout << event << "\n";
}

Я изменил следующие вещи:

  • Предпочитаю списки инициализации присваивать значения в телах конструктора
  • Выведите значение переменной event, а не ее адрес.Значение event совпадает со значением eventpointer, которое совпадает с адресом исходного SDL_Event объекта.
  • Избегайте квалификатора области.Внутри функций класса вы можете ссылаться на членов просто по имени.

В сторону : Я собираюсь ответить на фактический вопрос в стороне, так как он оказывается не имеет отношения к истинному намерению автора.Фактическая причина, по которой он видит 1 вместо значения указателя, заключается в следующем: он пытается напечатать значение указателя на член.operator<< не имеет перегрузки, которая принимает указатель на член, поэтому вместо этого он преобразует его в bool.Его выражение ненулевое, поэтому в результате преобразования получается true, который печатается как 1.

...