【问题标题】:missing string after returning object返回对象后缺少字符串
【发布时间】:2021-04-17 18:10:41
【问题描述】:

我试图返回一个包含整数和字符串的对象数组,但在返回后对象中的字符串为空。有人能帮助我吗?我是新手。

CTransponder *CVerwaltung::Initial(){
CTransponder Transpo[10] =
{
    CTransponder("Chef", 100),
    CTransponder("Chefin", 101),
    CTransponder("Sekretaerin", 102),
    CTransponder("Werksleiter", 200),
    CTransponder("Produktionsleiter", 201),
    CTransponder("Angestellter", 300),
    CTransponder("Angestellter2", 301),
    CTransponder("Hausmeister", 400),
    CTransponder("Putzkraft", 401),
    CTransponder("Aushilfe", 500)
};
return Transpo;

在return之前,一切都是应该的,但是在字符串为空之后。

【问题讨论】:

  • 你能告诉我我要改变什么吗?

标签: c++ arrays object return return-value


【解决方案1】:

您正在返回一个指向本地数组的指针,该数组超出范围并在函数退出时被破坏,从而破坏了数组中的对象。调用者最终会收到一个指向无效内存的悬空指针,并且通过该指针访问元素是未定义的行为

考虑改为返回std::vector<CTransponder>std::array<CTransponder, 10>,例如:

std::vector<CTransponder> CVerwaltung::Initial(){
    return std:vector<CTransponder>{
        CTransponder("Chef", 100),
        CTransponder("Chefin", 101),
        ...
    };
}

否则,使数组成为CVerwaltung的成员,例如:

class CVerwaltung{
private:
    CTransponder Transpo[10];
public:
    CVerwaltung();
    CTransponder* Initial();
};

CVerwaltung::CVerwaltung() {
    Transpo[0] = CTransponder("Chef", 100);
    Transpo[1] = CTransponder("Chefin", 101);
    ...
}

CTransponder* CVerwaltung::Initial() {
    return Transpo;
}

或者,只是将数组移动到全局范围内,例如:

CTransponder Transpo[10] = {
    CTransponder("Chef", 100),
    CTransponder("Chefin", 101),
    ...
};

std::vector<CTransponder> CVerwaltung::Initial(){
    return Transpo;
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-08-17
    • 1970-01-01
    • 1970-01-01
    • 2015-09-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多