【问题标题】:C++ - Calling a class constructor from another class constructorC++ - 从另一个类构造函数调用一个类构造函数
【发布时间】:2018-06-09 22:08:12
【问题描述】:

所以我正在学习 c++ 课程,在一次练习中,我需要在名为“Character”的类的构造函数中使用名为“Weapon”的类的构造函数,但每次我尝试编译它给出的代码时我这个错误:

Character.cpp|13|error: no match for call to `(Weapon) (int&,std::__cxx11::string&)’|

即使我在 Weapon.h 中声明了这个确切的构造函数:

#ifndef WEAPON_H
#define WEAPON_H

#include <string>

class Weapon
{
public:
    Weapon();
    Weapon(int damage, std::string name);
    virtual ~Weapon();

    int GetDamage() { return m_damage; }
    void SetDamage(int val) { m_damage = val; }
    std::string GetName() { return m_name; }
    void SetName(std::string val) { m_name = val; }

private:
    int m_damage;
    std::string m_name;
};

#endif // WEAPON_H

顺便说一句,我是法国人,这是我第一次发帖,但如果在某些行后面有任何错误或意外含义,我会尽力将源代码翻译成英文。这是我的 Character.cpp / Weapon.cpp / Character.h 文件。

#include "Character.h"
#include "Weapon.h"

Character::Character()
{
    m_health_points = 100;
    m_mana = 100;
}

Character::Character(int damage, std::string name)
{
    m_health_points = 100;
    m_mana = 100;
    m_weapon(damage, name);
}

Character::~Character()
{
}

#include "Weapon.h"

Weapon::Weapon()
{
}

Weapon::Weapon(int damage, std::string name)
{
    m_damage = damage;
    m_name = name;
}

Weapon::~Weapon()
{
}

#ifndef CHARACTER_H
#define CHARACTER_H

#include "Weapon.h"

class Character
{
public:
    Character();
    Character(int damage, std::string name);
    virtual ~Character();

    int GetHealthPoints() { return m_health_points; }
    void SetHealthPoints(int val) { m_health_points = val; }
    int GetMana() { return m_mana; }
    void SetMana(int val) { m_mana = val; }

private:
    int m_health_points;
    int m_mana;
    Weapon m_weapon;
};

#endif // CHARACTER_H

【问题讨论】:

    标签: c++ oop constructor c++14 encapsulation


    【解决方案1】:

    C++ 对构造函数中的成员变量初始化有特殊的构造:

    Character::Character(int damage, std::string name)
      : m_weapon(damage,name),
        m_health_points(100),
        m_mana(100)  
    {
    }
    

    【讨论】:

      【解决方案2】:
      m_weapon(damage,name);
      

      在这里,您尝试在成员变量m_weapon 上调用运算符operator(int, std::string)。没有定义这样的运算符。切换到:

      Character::Character(int damage, std::string name)
         : m_weapon(damage,name)
      {
         m_health_points=100;
         m_mana=100;
      }
      

      【讨论】:

        【解决方案3】:

        /您不需要声明任何 Weapon 类值。你需要像这样初始化字符构造函数__.../

        Character::Character(int damage, std::string name)
            : Weapon(damage,name),
        {
        }
        

        【讨论】:

          猜你喜欢
          • 2014-03-12
          • 2012-06-22
          • 2014-08-01
          • 1970-01-01
          • 2017-01-05
          • 2011-03-24
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多