【发布时间】:2015-05-21 15:54:47
【问题描述】:
我班级的对象变得等于nullptr 并且失败了。我似乎无法弄清楚为什么。
我正在尝试将字符串作为参数传递给已由另一个团队定义的类的构造函数 - 在此示例中为 Hello。 Hello 类定义了一个将引用字符串作为参数的构造函数。
我正在尝试在我的类 Abc 中初始化类 Hello 的对象并调用函数 print。
class Hello
{
Hello(const string& email)
{
// initialises some values.
}
void print();
};
class Abc
{
struct Options
{
string email;
};
Abc(const Options& options)
{
Hello hl(options.email);
cout << "h1 initialised";
}
void callprint()
{
if (h1 == nullptr)
cout << "NULL";
else
h1->print();
}
};
int main()
{
Abc::Options op; // for structure
op.email = "hello@world.com"
Abc obj(op); // to initialise constructor of class Abc
obj->callprint();
}
我目前得到的输出是:
h1 initialised
NULL
我似乎无法弄清楚为什么h1 变得等于nullptr。在 C++ 中,类对象在默认情况下永远不会变为 null 对吧?
之前,我没有检查 (h1==nullptr) 条件,我的程序失败了。应该怎么做才能保证h1不是空对象,才能成功调用打印函数。
重申一下,Hello 类已由另一个团队定义。我无法修改它。不过,我可以对 main 和 Abc 类进行任何更改。
【问题讨论】:
-
h1是什么?它在哪里声明?您是否在任何地方初始化或修改它?假设它是一个指针,它应该指向什么?为什么你期望它不为空?为什么初始化一个不同名称的局部变量hl后会误导打印"h1 initialised",构造函数退出时会被销毁?