2017-12-31 123 views
-2

오류 일치 기능 : 호출에 대한 매칭 기능 "cargaison :: cargaison()는"문제가 어디에서 오는지 t 알고 돈! 내가이 CPP 파일 (societe.cpp)를 HPP를 사용하여 파일 이름 societe.cpp을 creat에하고 싶지만는 HPP 파일의 생성자를 찾을 수 없습니다 compilator처럼 보이지만 제대로 선언 된 것, 사람은 도움을 주시기 바랍니다!오류 : 호출이 cargaison 할 :: cargaison()

헤더 파일 :

#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); 
}; 

소스 파일 :

#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--; 
} 

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. 어디 헤더 파일입니까? 2. 코드를 올바르게 들여 씁니다. 읽을 수 없습니다. 3. 문제에 대해 알려지지 않은 모든 것을 제거하십시오.이 링크는 도움이 될 수 있습니다 : [mcve]. – HolyBlackCat

+3

명시 적으로 소멸자를 호출 한 사람에게 조언을 구하지 마십시오. – molbdnilo

+0

cargaison.hpp에서 cargaison의 정의를 보여 주시겠습니까? 그리고 어떤 줄에 오류 메시지가 표시되는지에 대한 의견을 표시 하시겠습니까? (* 그런데, 헤더 파일에서'namespace std;를 사용하는 것은 매우 나쁜 습관입니다 *). – Christophe

답변

1

당신은 클래스와 배열을 모두 가지고있는 것처럼 보인다는 모두 cargaison을 지명했다. 그것은 약간의 혼란을 일으킬 것입니다. 컴파일러뿐만 아니라 코드를 읽는 모든 사람들을위한 것입니다.

예를 들어, 같은 코드에

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

우리가 어떻게 cargaison이 유형의 이름 때 알고 때이 배열의 이름은? 아니면 배열의 유형일까요? 당신이 배열을 만들 경우 :-)

그리고, 컴파일러는 모든 배열 구성원의 기본 생성자를 호출합니다. 클래스에 기본 생성자가 있습니까?

또한, 명시 적으로 cargaison[i].~cargaison(); 같은 소멸자를 호출하면 모든 경우 최소 99.99 %에서 잘못된 것입니다. 배열을 가지고 있다면 배열이 범위를 벗어나거나 포함 된 객체가 파기되었을 때 컴파일러가 대신 할 것입니다.

+0

내가 바꿀 수 있지만 오류는 여전히있다. –

+1

'cargaison :: cargaison()'생성자를 선언하고 정의 했습니까? – Eljay

+0

예 다른 파일에서했습니다. –