2017-09-24 62 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); 

这是在标题中。你会注意到最终的论点并不一致。

相关问题