指针地址给出1而不是十六进制地址

时间:2012-04-03 18:18:10

标签: c++ class object pointers sdl

我正在尝试这样做,所以我有一个对象,它有一个指针,所以多个类可以使用同一个对象。但它唯一给我的是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 个答案:

答案 0 :(得分:3)

尝试打印事件的,而不是其地址:

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。他的表达式为非null,因此转换结果为true,打印为1.