2017-09-24 80 views
-2

即時編碼與dev C++和我得到這個錯誤「$(CPP)$(LINKOBJ)-o $(BIN)$(LIBS)」in makefile.win文件,當我編譯我的項目時,對'運算符< <(std :: ostream &,Zfraction)'的消息undefined引用!奇怪的是我的代碼在我添加運算符+之前幾個小時工作,是編譯器還是其他問題?對operator <<(std :: ostream&,Zfraction)'undefined的引用'

這裏是我的頭:

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

這是在標題中。你會注意到最終的論點並不一致。

相關問題