C++变量可以在构造函数中访问,但不能在函数中访问
C++ variable can be accessed in constructor, but not in function
所以我遇到了一个奇怪的问题,我有一个对象,它有一个指向另一个对象的指针,而我想访问该对象的一个变量。我可以在构造函数中这样做,但当我在函数中时,它不起作用。
http://pastebin.com/2FHd7ak0
编辑:
在我初始化块之后,块的变量"state"似乎发生了变化。起初它输出0x3015a8,然后它变为0x110000
Edit2:所以我做了一个编译的小例子,但它给了我一个访问违规返回代码。很明显,我的指针出了问题,但我不知道是什么。。。我来自Java,所以这可能是原因之一。
http://pastebin.com/uF8t8wx9
您的示例程序有很多问题:
-
在
Foo::Foo
的定义中,有这样的表达式:bar->var
。在程序的这一点上,键入Bar
是不完整的。不能取消引用指向不完整类型的指针。 -
您声明了两个名称相似的类型:第一个是
::Foo::Bar
,然后是::Bar
。我怀疑你的意思是让他们是同一类型的。他们不是。 -
在您的主代码片段中,您有这样的表达式:
new Foo(new Bar());
。这不会编译,因为Foo
没有接受Bar*
的构造函数。(它确实有一个接受Foo::Bar*
的构造函数,但那是另一个野兽。)
注意:您现在已经发布了一些其他程序的片段。我上面列出的问题都不存在于其他程序中。
在您的pastebin条目中,您永远不会初始化
StateGame::blockArray
。您在stateGame::setBlock
中取消引用它。这会导致未定义的行为。
在Foo
中的任何方法中,在定义成员函数时都没有定义Bar
(仅向前声明)。因此,访问Bar::var
是非法的。如果编译器让你放弃它,那只是运气,但它没有义务这样做。
将Bar
的定义移动到Foo
的定义之前,就可以了。
将StateGame
传递给Block::Block
构造函数。几乎可以肯定的是,在构造Block
s之后,您会销毁StateGame
对象(也许StateGame存在于堆栈中,或者您delete
s)。
- 是否可以将函数导入命名空间,但不能导出它?
- std::unique_ptr 在 GCC 中工作,但不能在 Visual Studio 中编译
- 声明C++具有动态大小的数组类型在 Linux 中工作正常,但不能在 Windows 中工作
- 为什么我可以隐式地将字符*转换为常量字符*,但不能将无符号字符*
- std::chrono::d uration 可以按秒初始化,但不能按毫秒初始化?
- Python/C++:可以导入犰狳(arma::)但不能导入子程序arma::arma_rng::randn
- 为什么我可以从C++文件中读取 int 值,但不能浮点?
- C++程序在将 int 与 cin 一起使用时有效,但不能使用字符串
- SqLite c++,可以创建数据库,但不能将 anthing 插入到表中
- std::remove() 按预期处理文字,但不能与取消引用的迭代器一起工作
- 16 位系统中的程序如何访问大于 65535 的整数,但不能访问地址
- C++:返回本地对象,但不能正常工作
- 可以访问一个类中的播放器结构,但不能访问另一个类中的播放器结构
- 返回实例变量的c++方法可以访问变量中的数据,但不能更改它,但在编译时不会生成错误
- 用C++替换std::字符串中的一个子字符串,但不能全部替换
- 我可以在Windows(Visual C++)中读取bin文件,但不能在linux(GCC)上读取bin文件
- QProcess可以启动程序,但不能启动python(命令行)
- C++变量可以在构造函数中访问,但不能在函数中访问
- c++声明向量数组以获取类,但不能访问成员变量
- 一个函数,它是允许'read access'其'private members'但不能"写入访问权限"的'friend of a Class'?