【发布时间】:2018-03-27 21:56:41
【问题描述】:
我有两个班级,Foo 和 Bar。它们都包含一个指向Baz 对象的指针。我希望 Foo 实例和 Bar 实例中的 Baz 指针指向同一个 Baz 对象。
Baz 对象有一个名为 name 的成员,其中包含 getter 和 setter 函数。
Foo 对象包含 Bar 对象。
Bar 对象具有打印Baz 对象名称的方法。
Baz 对象名称必须设置在Foo 的范围内。
这是我尝试过的:
在Foo的构造函数中,设置这个bazA的名字,并将属于bar的bazB设置为等于属于Foo的bazA。
//Foo.h
class Foo {
public:
explicit Foo();
Baz* bazA;
Bar bar;
}
//Foo.cpp
Foo::Foo()
{
this->bazA->setName("hello");
this->bar.bazB = bazA;
}
//Bar.h
class Bar{
public:
Baz* bazB;
void printName ();
}
//Bar.cpp
void Bar::printName ()
{
std::cout << "name: " << bazB->getName();
//Should print out "name: hello"
}
当我这样做时:
//Main.cpp
Foo foo;
foo.bar.printName();
程序崩溃是因为名称成员尚未在属于Bar 对象的Baz 对象中初始化。
但是属于Bar 的Baz 对象应该与属于Foo 的Baz 对象相同,后者已经设置了名称,所以它应该可以工作。
为什么会出现这个错误?
如何在Foo 和Bar 类之间正确共享Baz 对象?
【问题讨论】:
-
在某些时候您需要实际分配
Baz对象。 -
我有 edited your post 为类名添加一些格式以使其更清晰,并且我还更正了您的
Class和Public的拼写错误,因为它们似乎与问题无关被问到。如果我做错了,请随时将它们原样添加。
标签: c++ pointers object instances