2017-02-01 2 views
0

J'ai deux classes à l'intérieur d'un fichier d'en-tête, la 2ème classe dépendant du 1er. Inclus ce fichier d'en-tête dans un fichier .cpp où j'implémente le prototype du constructeur pour la classe Flight. Compiling me donne l'erreur suivante:C++ Tableau d'un objet (créé) dans une autre classe

Error: no matching function for call to ‘Passenger::Passenger()’ 
     Flight::Flight(int maxPassenger, int flightNo) { 

est ici les deux classes dans mon fichier d'en-tête

/* 
*Passenger Class: 
*/ 
class Passenger 
{ 
public: 
    int flightNo; 
    string lastName; 
    string firstName; 
    int seatNo; 
public: 
    Passenger(int flightNo, string lastName,string firstName, int seatNo); 
}; 
/* 
*Flight Class: 
*/ 
class Flight { 
public: 
    int maxPassenger; 
    int currentPos; 
    int flightNo; 
    Passenger list[20]; 
public: 
    Flight (int maxPassenger, int flightNo); 
} 

Et Voici l'implémentation du constructeur:

Flight::Flight(int maxPassenger, int flightNo) { 
    maxPassenger = maxPassenger; 
    // list = new Passenger [maxPassenger]; 
    flightNo = flightNo; 
} 

Je peux comprendre qu'il ya un conflit dans les constructeurs. Mais je ne peux pas comprendre exactement ce qui ne va pas. Toute aide serait très appréciée.

Répondre

0

Vous n'avez pas de constructeur qui prend zéro argument.

Ce code list = new Passenger [maxPassenger]; invoque un constructeur sans aucun argument Passenger(), mais aucun d'entre eux n'a déclenché l'erreur.

+0

L'ajout d'un constructeur qui ne nomme aucune valeur affecte-t-il la liste? J'essaie de faire une liste qui prend en compte l'objet passager, c'est-à-dire qu'il contiendra également le nom du passager, seatNo et FlightNo. pour que je puisse cout << liste [2] .lastName Y at-il d'autres choses que je dois faire? – Mish

+0

Non, cela n'affectera pas la liste mais les objets Passenger n'auront aucune valeur valide pour seatNo, FlightNo etc, c'est à vous de les initialiser correctement plus tard. – bluefalcon