Ik heb problemen met een heel eenvoudig programma. Het gooit de fouten:
error C2512: 'Player' : no appropriate default constructor available
IntelliSense: no default constructor exists for class "Player"
Ik heb het gevoel dat het iets te maken heeft met het declareren van de Player-klasse als een privévariabele in Game.h, maar ik zie niet in waarom. Alle hulp wordt zeer op prijs gesteld.
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;
};
Speler.cpp
#include "Player.h"
#include <iostream>
using namespace std;
Player::Player(int walletAmount)
{
wallet = walletAmount;
}
Player::~Player(void)
{
}
Antwoord 1, autoriteit 100%
In tegenstelling tot C#, deze verklaring;
Player player;
…is een instantie van het type player
, wat betekent dat tegen de tijd dat u het in de constructor toewijst, het al is geconstrueerd zonder een parameter.
Wat u moet doen, is de klas vertellen hoe player
moet worden geïnitialiseerd in een zogenaamde initializerlijstdie u aan de constructorheader toevoegt;
Game::Game(void) : player(100)
{
...
…die de compiler vertelt om die constructor te gebruiken om player
in de eerste plaats te initialiseren in plaats van eerst de standaard constructor zonder parameters te gebruiken en vervolgenseraan toe te wijzen .
Antwoord 2, autoriteit 39%
In het algemeen – niet in dit geval – de fout
no appropriate default constructor available
kan ook voorkomen als u bent vergeten het headerbestand voor het gerelateerde object op te nemen.
Dit is mij overkomen, dus ik wilde deze oplossing hier toevoegen.
Antwoord 3, autoriteit 30%
Alleen Player::Player(int)
bestaat, dus je moet de speler initialiseren in Game::Game()
Game::Game(void)
: player( 100 )
{
}
Antwoord 4, autoriteit 30%
Wanneer u een instantie van Game
maakt, probeert deze zijn lid player
te construeren met behulp van de standaardconstructor. Initialiseer player
in de initialisatielijst, niet in de body van de constructor:
Game::Game() : player(100)
{
...
}