所以我遇到了这个奇怪的问题,我有一个对象,它有一个指向另一个对象的指针,以及我想要访问变量的那个对象。我可以在构造函数中执行此操作,但是当我在函数中时它不起作用。
编辑:
在我将它们初始化之后,块的变量“状态”似乎发生了变化。首先它输出0x3015a8,然后它变为0x110000
Edit2:所以我做了一个编译的小例子,但它给了我一个访问冲突返回码。我明显做了一些错误的指针,但我无法找到什么......我来自Java,所以这可能是它的原因。
答案 0 :(得分:2)
您的示例程序存在许多问题:
在Foo::Foo
的定义中,您有以下表达式:bar->var
。此时,在您的程序中,类型Bar
不完整。您不能取消引用指向不完整类型的指针。
您声明了两个名称相似的类型:第一个::Foo::Bar
,然后是::Bar
。我怀疑你认为他们是同一类型。他们不是。
在主代码片段中,您有以下表达式:new Foo(new Bar());
。这不会编译,因为Foo
没有一个带Bar*
的构造函数。 (它确实有一个带Foo::Bar*
的构造函数,但这是一个不同的野兽。)
<小时/> 注意:您现在已经发布了其他一些程序的片段。我在上面列出的所有问题都没有出现在这个其他程序中。
<小时/> 在pastebin entry中,您永远不会初始化
StateGame::blockArray
。您可以在stateGame::setBlock
中取消引用它。这会导致未定义的行为。
答案 1 :(得分:0)
在Foo
中的任何方法中,Bar
在定义成员函数时尚未定义(仅向前声明)。因此,访问Bar::var
是非法的。如果编译器允许你使用它,那只是运气,但它没有义务这样做。
在Bar
的定义之前移动Foo
的定义,你没事。
答案 2 :(得分:0)
您将StateGame
传递给Block::Block
构造函数。几乎可以肯定的是,在构造StateGame
之后你可以销毁Block
对象(也许StateGame存在于堆栈中,或者delete
d)。