未定义的引用`operator<<(std :: ostream&,Zfraction)'

时间:2017-09-24 15:34:18

标签: c++

使用dev c ++进行编码,我在makefile.win文件中得到了这个错误“$(CPP)$(LINKOBJ)-o $(BIN)$(LIBS)”,消息未定义引用`operator<<(当我编译我的项目时,std :: ostream&,Zfraction)'奇怪的是我的代码在我添加运算符之前几个小时工作了,是编译器的问题还是什么?

这是我的标题:

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

1 个答案:

答案 0 :(得分:0)

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

这是实现中的函数头。

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

这是在标题中。你会注意到最后的论点不同意。