2017-12-31 202 views
-2

エラー: "cargaison :: cargaison()"への呼び出しで一致する関数がありません どこから問題が発生しているかを知る!!! hppファイルsociete.cppを使ってcppファイル(societe.cpp)を作成したいのですが、コンパイラがhppファイルでコンストラクタを見つけることができないようですが、正しく宣言されています。エラー: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という名前の両方の両方を持っているように見える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

。それはいくつかの混乱を引き起こすでしょう。コンパイラだけでなく、コードを読んでいる皆さんにも。

例えば、このようなコードで

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

どのように我々はcargaisonは型の名前であるとき、知っているとするとき、それは、配列の名前はありますか?または、おそらく、配列の型ですか? :-)

配列を作成すると、コンパイラはすべての配列メンバーのデフォルトコンストラクタを呼び出します。クラスにデフォルトコンストラクタがありますか?

また、cargaison[i].~cargaison();のようなデストラクタを明示的に呼び出すことは、すべてのケースの少なくとも99.99%で間違っています。配列を持っている場合は、配列がスコープになったとき、または含まれているオブジェクトが破棄されたときにコンパイラがそれを行います。

+0

私はそれを変更しますが、エラーはまだ残っています –

+1

'cargaison :: cargaison()'コンストラクタを宣言して定義しましたか? – Eljay

+0

はい私は他のファイルで行いました –

関連する問題