указатель c ++ в 64 бит - PullRequest
       12

указатель c ++ в 64 бит

0 голосов
/ 19 декабря 2011

Я пытаюсь что-то вроде этого

//A.h
class P;

class A
{
  A(P* pp) { p = pp; }
  P* p;
};
//B.h
#include "P.h"

class B : public A
{
   B(A* aa);
};
//B.cpp
B::B(P* pp) : A(pp)
{}

проблема в том, что, например,

pp = 0x00000000024af3f0 

, но после назначения

p = 0x024af3f0cdcdcdcd

это происходит только в 64-битной версии.также, если я не использую предварительное объявление P, нет проблем.а также если я делаю р = рр;в конструкторе Б нет проблем.

1 Ответ

4 голосов
/ 19 декабря 2011

Это может произойти, если вы забудете перекомпилировать один из исходных файлов после добавления данных в class A. Смещение p изменяется (в вашем случае на четыре байта), но об этом знает только один из исходных файлов. Перекомпилируйте все и попробуйте снова.

...