Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

C++ - No appropriate default constructor available [duplicate]

I'm having trouble with a very simple program. It throws the errors:

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

IntelliSense: no default constructor exists for class "Player"

I have a feeling it's got something to do with declaring the Player class as a private variable in the Game.h but I can't see why. Any help would be much appreciated.

Game.h

#pragma once
#include "Player.h"

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

Game.cpp

#include "Game.h"

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

    player = p;
}

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

Game::~Game(void)
{
}

Player.h

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

private:
    int wallet;
};

Player.cpp

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

using namespace std;

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

Player::~Player(void)
{
}
like image 398
RobotEyes Avatar asked Oct 07 '13 19:10

RobotEyes


1 Answers

In contrast to C#, this declaration;

Player player;

...is an instantiation of the type Player, which means that by the time you're assigning it inside the constructor, it has already been constructed without a parameter.

What you need to do is to tell the class how to initialize player in what is called an initializer list that you append to the constructor header;

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

...which tells the compiler to use that constructor to initialise player in the first place instead of first using the default no-parameter constructor and then assigning to it.

like image 140
Joachim Isaksson Avatar answered Oct 14 '22 04:10

Joachim Isaksson