1. ホーム
  2. c++

[解決済み] C++ - 適切なデフォルトコンストラクタがない [重複].

2022-02-15 18:10:39

質問

とても簡単なプログラムで困っています。エラーを投げてしまうのです。

error C2512: 'Player' : no appropriate default constructor available

IntelliSense: no default constructor exists for class "Player"

Game.hでPlayerクラスをプライベート変数として宣言していることと関係があるような気がするのですが、原因がわかりません。何かご教示いただければ幸いです。

ゲーム.h

#pragma once
#include "Player.h"

class Game
{
public:
    Game(void);
    void start(void);
    ~Game(void);
private:
    Player player;
};

ゲーム.cpp

#include "Game.h"

Game::Game(void)
{
    Player p(100);

    player = p;
}

void Game::start()
{
    ...
}

Game::~Game(void)
{
}

プレイヤー.h

#pragma once
class Player
{
public:
    Player(int);
    ~Player(void);

private:
    int wallet;
};

プレイヤー.cpp

#include "Player.h"
#include <iostream>

using namespace std;

Player::Player(int walletAmount)
{
    wallet = walletAmount;
}

Player::~Player(void)
{
}

解決方法は?

C#とは対照的な、この宣言。

Player player;

のインスタンス化です。 Player つまり、コンストラクタの中で代入するときには、すでにパラメータなしで構築されているということです。

必要なのは、クラスがどのように player と呼ばれるもので イニシャライザーリスト を作成し、コンストラクタのヘッダに追加します。

Game::Game(void) : player(100)
{
...

...これは、コンパイラにそのコンストラクタを使って player を使う代わりに、デフォルトのパラメータ無しコンストラクタと では に代入しています。