2017-12-31 32 views
-2

Fehler: passende Funktion für Anruf zu "cargaison :: cargaison()" don t wissen, wo das Problem herkommt !!! Ich möchte eine cpp-Datei (societe.cpp) mit der hpp-Datei namens societe.cpp erstellen, aber es sieht so aus, als ob der Compilator den Konstruktor in der hpp-Datei nicht findet, aber es ist richtig deklariert, bitte Leute helfen !!Fehler: keine übereinstimmende Funktion für Anruf zu Cargaison :: cargaison()

Headerdatei:

#include<iostream> 
#include"cargaison.hpp" 
using namespace std; 
class societe{ 

    private: 
     cargaison carg[100]; 
     int tailleMaxs ; 
     int static tailleTabs ; 
    public: 
     societe(int tmax); 
     societe(float pods,float vol,int num, int tmaxs); 
     ~societe(); 
     void affich_societe(); 
     cargaison getcargaison(int i); 
     void setcargaison(int i, cargaison a); 
     void ajout_cargaison(float pods,float vol,int num,int ref, float dist, bool b); 
     void supp_cargaison(int numc); 
}; 

Quelldatei:

#include <iostream> 
#include "societe.hpp" 
using namespace std; 
int tailltabs = 0; 
societe::societe(int tmax)/* here where the error is */ 
{ 
    tailleMaxs = 100; 
    tailleTabs = tmax; 
} 
societe::societe(float pods, float vol, int num, int tmaxs) 
{ 
    tailleMaxs = tmaxs; 
    tailleTabs = 1; 
} 

societe::~societe() 
{ 
    for (int i = 0; i < tailleTabs - 1; i++) { 
     carg[i].~cargaison(); 
    } 
} 
void societe::affich_societe() 
{ 
    for (int i = 0; i < tailleTabs - 1; i++) { 
     carg[i].affichCargaison(); 
    } 
} 
cargaison societe::getcargaison(int i) 
{ 
    return carg[i]; 
} 
void societe::setcargaison(int i, cargaison a) 
{ 
    carg[i] = a; 
} 

void societe::ajout_cargaison(float pods, float vol, int num, int ref, float dist, bool b) 
{ 
    if (b == 0) { 

     routiere[tailleTabs + 1].routiere(pods, vol, num, ref, dist); 
    } 
    if (b == 1) { 

     aerienne[tailleTabs + 1].aerienne(pods, vol, num, ref, dist); 
    } 
    tailleTabs++; 
} 
void societe::supp_cargaison(int num) 
{ 
    for (int i = 0; i < tailletabs - 1; i++) { 
     if (carg[i].getRef() == num) { 
      for (int j = i; j < tailltabs - 1; j++) { 
       carg[j] = carg[j + 1]; 
       break; 
      } 
      carg[j - 1].~cargaison(); 
     } 
    } 
    tailleTabs--; 
} 

die cargaison.hpp

#include<iostream> 
#include"marchandise.hpp" 
class cargaison { 

    protected: 
     marchandise march[100]; 
     int tailleMax ; 
     int static tailletab ; 
    public: 
     void addMarchandise(marchandise a); 
     void suppMarchandise(int num); 
     void affichParId(int num); 
     void affichTT(); 
     float affichPoidTotal(); 
     float affichVolTotal(); 
     float affichCout(); 
     cargaison(int tmax); 
     cargaison(float pods,float vol,int num,int tmax); 
     ~cargaison(); 
     void affichCargaison(); 
     void modiferMarch(float npods,float nvol,int nnum, int onum); 
    }; 
+2

1. Wo ist die Header-Datei? 2. Bitte Code richtig einrücken, es ist nicht lesbar. 3. Entfernen Sie alles, was für das Problem nicht offen ist. Dieser Link kann helfen: [mcve]. – HolyBlackCat

+3

Nimm nicht den Ratschlag desjenigen, der dir gesagt hat, den Destruktor explizit anzurufen. – molbdnilo

+0

Können Sie uns bitte die Definition von cargaison in cargaison.hpp zeigen? Und mit einem Kommentar anzeigen, auf welcher Zeile Sie die Fehlermeldung erhalten? (* Übrigens, 'namespace std;' in einer Header-Datei zu verwenden, ist eine sehr schlechte Praxis *). – Christophe

Antwort

1

Sie scheinen beide eine Klasse und eine Anordnung zu haben, beide cargaison genannt. Das wird Verwirrung stiften. Nicht nur für den Compiler, sondern auch für alle, die den Code lesen.

Zum Beispiel in Code wie folgt

void societe::setcargaison(int i, cargaison a){ 
    cargaison[i]=a; 
} 

, wie wir wissen, wann cargaison der Name einer Art ist, und wenn es der Name eines Arrays? Oder vielleicht auch der Typ des Arrays? :-)

Und wenn Sie ein Array erstellen, wird der Compiler den Standardkonstruktor für alle Array-Mitglieder aufrufen. Hat die Klasse einen Standardkonstruktor?

Auch explizit einen Destruktor wie cargaison[i].~cargaison(); aufrufen ist in mindestens 99,99% aller Fälle falsch. Wenn Sie ein Array haben, wird der Compiler das für Sie tun, wenn das Array unseren Geltungsbereich verlässt oder wenn das enthaltende Objekt zerstört wird.

+0

ich ändere es, aber der Fehler ist immer noch da –

+1

Haben Sie einen 'cargaison :: cargaison()' Konstruktor deklariert und definiert? – Eljay

+0

ja, ich habe in einer anderen Datei –

Verwandte Themen