另一个构造函数中的对象构造函数?

Object constructor within another constructor?

我对 CPP 还是很陌生,我正在利用我们目前所有的空闲时间尝试新事物。我有 2 个单独的 类 并且我想在 main 中为它们创建一个初始化列表...也许我没有用最好的词来表达它,但是...

有这个:

class Status
{
public:
    int x, y;
    float angle;
    unsigned short hp;
    bool isActive;
    Status(const int _x, const int _y, const float _angle, const unsigned short _hp, bool _isActive)
        : x(_x), y(_y), angle(_angle), hp(_hp), isActive(_isActive){};
};

还有这个:

class Hero
{
    std::string name;
    Status status;
    Hero(const std::string _name, Status &status)
        : name(_name), status(x, y, angle, hp, isActive){}; 
    void display()
    {
        std::cout << "Hero:\t" << name << std::endl;
        std::cout << "HP:\t" << Hero::status.hp << std::endl;
        std::cout << "Hero is " << Hero::status.isActive ? " active" : " inactive";
        std::cout << std::endl;
    };

...我最终想做这样的事情... Hero h = {"Iron Man", {1, 2, 32.9, 100, true}};

请各位大侠指教...

两个问题:

  1. 首先不能直接使用Status成员变量。要解决这个问题,您要么需要正常访问它们,如

    Hero(const std::string _name, Status &_status)
        : name(_name), status(_status.x, _status.y, _status.angle, _status.hp, _status.isActive)
    {}
    

    或者您可以只依赖自动生成的复制构造函数:

    Hero(const std::string _name, Status &_status)
        : name(_name), status(_status)
    {}
    
  2. 第二个问题是表达式 {1, 2, 32.9, 100, true} 导致所谓的 rvalue ,它不能被普通引用捕获。您需要使用右值引用、const 引用或普通的非引用值。真心推荐后者:

    Hero(const std::string _name, Status _status)
        : name(_name), status(_status)
    {}
    

此代码:

Hero(const std::string _name, Status &status)
    : name(_name), status(x, y, angle, hp, isActive){}; 

应该是:

Hero(const std::string _name, Status status)
    : name(_name), status(status){};

可选 status(std::move(status)) .

此外,条件运算符的优先级高于 << 的行也存在逻辑错误,因此您需要一些括号。