2017-09-24 2 views
-2

イム・コーディング++と私はこのエラーを取得する "$(CPP)$(LINKOBJ)-o $(BIN)$(LIBS)" でオペレータ< <(STD :: ostreamに&、Zfraction) `へのメッセージ未定義参照してmakefile.winファイル」私は私のプロジェクトをコンパイルするときに!奇妙なことは私のコードは、演算子+を追加する前に数時間働いた、それはコンパイラや何かの問題ですか?ここ`演算子<<(STD :: ostreamに&、Zfraction)への未定義参照」のdevのCと

は私のヘッダーです:

#ifndef DEF_FRACTION 
#define DEF_FRACTION 

#include <iostream> 

class Zfraction 
{ 
public: 

Zfraction(); 
Zfraction(int m_numerateur, int m_denominateur); 
Zfraction(int m_numerateur); 
void afficher(std::ostream &flux) const; 
Zfraction& operator+=(Zfraction const& fraction); 
Zfraction add(Zfraction const& fraction) const; 

private: 

int m_numerateur; 
int m_denominateur; 

}; 
std::ostream& operator<<(std::ostream &flux, Zfraction fraction); 
Zfraction operator+(Zfraction const& fraction1, Zfraction const& fraction2); 
#endif 

と私のcppファイルの:

#include "Zfraction.h" 


Zfraction::Zfraction() 
{ 
    m_numerateur=1; 
    m_denominateur=0; 
} 

Zfraction::Zfraction(int numerateur, int denominateur) 
{ 
    m_numerateur=numerateur; 
    m_denominateur=denominateur; 
} 

Zfraction::Zfraction(int numerateur) 
{ 
    m_numerateur=numerateur; 
    m_denominateur=1; 
} 

void Zfraction::afficher(std::ostream &flux) const 
{ 
    flux << m_numerateur<<"/"<<m_denominateur; 
} 

std::ostream& operator<<(std::ostream &flux, Zfraction const& une_fraction) 
{ 
    une_fraction.afficher(flux); 
    return flux; 
} 

Zfraction Zfraction::add(Zfraction const& fraction) const 
{ 
    Zfraction somme; 
    somme.m_numerateur=(m_numerateur*fraction.m_denominateur)+(m_denominateur*fraction.m_numerateur); 
    somme.m_denominateur=m_denominateur*fraction.m_denominateur; 
    return somme; 
} 

Zfraction operator+(Zfraction const& fraction1, Zfraction const& fraction2) 
{ 
    Zfraction resultat; 
    resultat = fraction1.add(fraction2); 
    return resultat; 
} 
+5

もう一度関数のシグネチャを確認してください。 – user0042

+0

リンカーは、ヘッダのように、 'Zfractionのfraction'パラメータを取るオペレータを探しているだけ' ZfractionのCONST&une_fraction'をとるものを見つけています。だから、そんなことはできないでしょう? –

答えて

1
std::ostream& operator<<(std::ostream &flux, Zfraction const& une_fraction) 

これは、実装の関数ヘッダです。

std::ostream& operator<<(std::ostream &flux, Zfraction fraction); 

これはヘッダーにあります。最終的な議論が一致しないことに気付くでしょう。

関連する問題