C++变量可以在构造函数中访问,但不能在函数中访问

C++ variable can be accessed in constructor, but not in function

本文关键字:访问 但不能 函数 构造函数 变量 C++      更新时间:2023-10-16

所以我遇到了一个奇怪的问题,我有一个对象,它有一个指向另一个对象的指针,而我想访问该对象的一个变量。我可以在构造函数中这样做,但当我在函数中时,它不起作用。

http://pastebin.com/2FHd7ak0

编辑:
在我初始化块之后,块的变量"state"似乎发生了变化。起初它输出0x3015a8,然后它变为0x110000

Edit2:所以我做了一个编译的小例子,但它给了我一个访问违规返回代码。很明显,我的指针出了问题,但我不知道是什么。。。我来自Java,所以这可能是原因之一。

http://pastebin.com/uF8t8wx9

您的示例程序有很多问题:

  1. Foo::Foo的定义中,有这样的表达式:bar->var。在程序的这一点上,键入Bar是不完整的。不能取消引用指向不完整类型的指针。

  2. 您声明了两个名称相似的类型:第一个是::Foo::Bar,然后是::Bar。我怀疑你的意思是让他们是同一类型的。他们不是。

  3. 在您的主代码片段中,您有这样的表达式:new Foo(new Bar());。这不会编译,因为Foo没有接受Bar*的构造函数。(它确实有一个接受Foo::Bar*的构造函数,但那是另一个野兽。)


注意:您现在已经发布了一些其他程序的片段。我上面列出的问题都不存在于其他程序中。


在您的pastebin条目中,您永远不会初始化StateGame::blockArray。您在stateGame::setBlock中取消引用它。这会导致未定义的行为。

Foo中的任何方法中,在定义成员函数时都没有定义Bar(仅向前声明)。因此,访问Bar::var是非法的。如果编译器让你放弃它,那只是运气,但它没有义务这样做。

Bar的定义移动到Foo的定义之前,就可以了。

StateGame传递给Block::Block构造函数。几乎可以肯定的是,在构造Blocks之后,您会销毁StateGame对象(也许StateGame存在于堆栈中,或者您deletes)。

相关文章: