ストーリー: プログラミング クラスのクラスを作成する必要があり、カスタム プロジェクト (スペース マリーン - ええ、私は少しファンです) が進行中です。しかし、簡単には解決できない問題を見つけました。私が重要だと思ういくつかのコードを次に示します。
ヘッダ
class SpaceMarine
{
public:
...
SpaceMarine(); // default constructor
SpaceMarine(std::string name,
unsigned int rang,
Statystyki& stats,
std::auto_ptr<Pancerz> armor, Bron& weapon);
private:
std::string name_;
unsigned int ranga_;
Statystyki* stats_;
std::auto_ptr<Pancerz> armor_;
Bron* weapon_;
Experience experience_;
明確にするために、「Statystyki」、「Pancerz」、および「Bron」は、メイン クラス SpaceMarine のメンバーであるクラスです。プロジェクト要件: 1 つのスマート ポインター (ここでは auto_ptr) を作成する必要があります。
.CPP
SpaceMarine::SpaceMarine()
{
name_ = "John";
stats_ = new Statystyki();
weapon_ = new Bron();
std::auto_ptr<Pancerz> armor_(new Pancerz());
ranga_ = 0;
}
SpaceMarine::SpaceMarine(std::string name,
unsigned int rang,
Statystyki& stats,
std::auto_ptr<Pancerz> armor, Bron& weapon)
: armor_(std::move(armor))
{
name_ = name;
ranga_ = rang;
stats_ = stats;
armor_ = std::move(armor);
weapon_ = weapon;
}
さて、問題の始まり: これは「main.cpp」ファイルの一部です:
SpaceMarine SM1;
SpaceMarine SM2("Azrael", 3, S2, **P2** , B2);
// S - ステータス、P - アーマー、B 武器クラス
P2 と呼ばれるこの小さなものには問題があります。これは、鎧の auto_ptr である必要があります。以前に宣言された鎧オブジェクト P2 があります。auto_ptr をコンストラクターに「マージ」する際に問題があります。何か案は?
また、コードの改善に関するすべてのアドバイスを歓迎します:)
マット
Ps。初めての投稿はこちら!:D お気楽にどうぞ ^^
編集
コードを整理してくれた user1158692 に感謝します Hansmaad と user1158692 に感謝します。
将来の参考のための最終的なコードは次のとおりです。
ヘッダ
SpaceMarine(std::string name,
unsigned int rang,
Statystyki& stats,
Pancerz& armor,
Bron& weapon);
.CPP
SpaceMarine(std::string name,
unsigned int rang,
Statystyki& stats,
Pancerz& armor,
Bron& weapon);
{
name_ = name;
ranga_ = rang;
stats_ = &stats;
std::unique_ptr<Pancerz> armor_(&armor);
weapon_ = &weapon;
}
// そして main.cpp で宣言する例
Bron B2("Chainsword" , 0, 6);
Pancerz P2("Power armor", 12);
Statystyki S2(6,6,4,8,20);
SpaceMarine SM2("Azrael", 3, S2, P2 , B2);