【问题标题】:Class's object becomes null类的对象变为空
【发布时间】:2015-05-21 15:54:47
【问题描述】:

我班级的对象变得等于nullptr 并且失败了。我似乎无法弄清楚为什么。

我正在尝试将字符串作为参数传递给已由另一个团队定义的类的构造函数 - 在此示例中为 HelloHello 类定义了一个将引用字符串作为参数的构造函数。

我正在尝试在我的类 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 类已由另一个团队定义。我无法修改它。不过,我可以对 mainAbc 类进行任何更改。

【问题讨论】:

  • h1 是什么?它在哪里声明?您是否在任何地方初始化或修改它?假设它是一个指针,它应该指向什么?为什么你期望它不为空?为什么初始化一个不同名称的局部变量hl后会误导打印"h1 initialised",构造函数退出时会被销毁?

标签: c++ class object c++11


【解决方案1】:

您应该将 h1 定义为成员变量。现在,你在函数体(即构造函数)中创建它,所以它的作用域就是这个函数。函数返回后,您的对象将被销毁。

【讨论】:

    猜你喜欢
    • 2015-03-04
    • 1970-01-01
    • 1970-01-01
    • 2014-07-25
    • 2023-03-27
    • 1970-01-01
    • 2018-01-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多