1. ホーム
  2. c++

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

2022-01-26 10:56:10

質問

とても簡単なプログラムで困っています。それはエラーを投げます。

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

{{コード

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

ゲーム.h

IntelliSense: no default constructor exists for class "Player"

ゲーム.cpp

#pragma once
#include "Player.h"

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

プレイヤー.h

#include "Game.h"

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

    player = p;
}

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

Game::~Game(void)
{
}

プレイヤー.cpp

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

private:
    int wallet;
};

解決するには?

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

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

using namespace std;

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

Player::~Player(void)
{
}

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

をどのように初期化するかをクラスに指示する必要があります。 Player と呼ばれるもので イニシャライザーリスト で、コンストラクタのヘッダに追加します。

player

...これは、コンパイラにそのコンストラクタを使用して次のものを初期化するように指示します。 Game::Game(void) : player(100) { ... を使う代わりに、デフォルトのパラメータ無しコンストラクタと では に代入しています。