C++ - 从另一个 class 构造函数调用 class 构造函数
C++ - Calling a class constructor from another class constructor
所以我正在学习一门 C++ 课程,在一次练习中,我需要在名为 [=26] 的 class 的构造函数中使用名为 "Weapon" 的 class 的构造函数=] 但每次我尝试编译代码时,它都会给我这个错误:
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
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;
}
C++ 在构造函数中对成员变量初始化有特殊的构造:
Character::Character(int damage, std::string name)
: m_weapon(damage,name),
m_health_points(100),
m_mana(100)
{
}
/你不需要申报任何武器 class 价值。您需要初始化字符构造函数,如 this__.../
Character::Character(int damage, std::string name)
: Weapon(damage,name),
{
}
所以我正在学习一门 C++ 课程,在一次练习中,我需要在名为 [=26] 的 class 的构造函数中使用名为 "Weapon" 的 class 的构造函数=] 但每次我尝试编译代码时,它都会给我这个错误:
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
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;
}
C++ 在构造函数中对成员变量初始化有特殊的构造:
Character::Character(int damage, std::string name)
: m_weapon(damage,name),
m_health_points(100),
m_mana(100)
{
}
/你不需要申报任何武器 class 价值。您需要初始化字符构造函数,如 this__.../
Character::Character(int damage, std::string name)
: Weapon(damage,name),
{
}