64位的c++指针赋值

标签 c++ pointers 64-bit forward-declaration

我正在尝试这样的事情

//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 的前向声明也没有问题。还有如果我做 p = pp;在 B 的构造函数中没有问题。

最佳答案

如果您在将数据添加到 A 类 后忘记重新编译其中一个源文件,就会发生这种情况。 p 的偏移量发生变化(在您的例子中,偏移量为四个字节),但只有一个源文件知道它。重新编译所有内容并重试。

关于64位的c++指针赋值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8560851/

相关文章:

c++ - 在 32 位操作系统上生成 64 位可执行文件

c++ - 未调用移动构造函数

c++ - 为什么通过指针分配给常量没有效果?

c - fgets 在函数内部获取结构指针崩溃

c++ - 使没有成员的仿函数成为类成员对象或堆栈对象是否更有效?

c++ - 如何在每 1 分钟后在 C++ 中执行特定代码

c - 在 C 中传递和返回数组

c# - 用于 C# 的 Quantlib 64 位?

c++ - 16 字节长的整数类型

c++ - 如何生成原始数据流?