C ++错误:输出未在命名空间中定义

时间:2014-02-13 04:53:59

标签: c++ class compiler-errors operator-overloading

更新:我在下面做了Sergii的更改,但现在我得到了错误:对`cs202 :: operator<<(std :: basic_ostream>&,cs202 :: Rational const&)'的未定义引用。任何想法如何解决这一问题?感谢

我很感激帮助弄清楚为什么我收到此错误: “错误:'output'不是命名空间'cs202'”

的成员

我有一个名为Rational的类,如下所示:

 #ifndef RATIONAL_H
 #define RATIONAL_H

namespace cs202{

class Rational
{
private:

    int m_numerator;
    int m_denominator;

public:

    Rational(int nNumerator = 0, int nDenominator = 1) {
        m_numerator = nNumerator;
        m_denominator = nDenominator;
    }

    int getNumerator(){return m_numerator;}
    int getDenominator(){return m_denominator;}

    friend std::ostream& operator<<(std::ostream& output, const Rational& cRational);

   };
    }

    #endif

友元函数的实现文件覆盖&lt;&lt;运算符看起来像这样:

  #include "rational.h"

  namespace cs202{

     friend std::ostream& operator<<(std::ostream& output, const Rational& cRational)
  {
      output << cRational.m_numerator << "/" << cRational.m_denominator;
     return output;
  }

  }

最后,Main看起来像这样:

  #include <iostream>
  #include "rational.h"

  using namespace std;
  using namespace cs202;

  int main()
  {
      Rational fraction1(1, 4);

      cs202::output << fraction1 << endl;

      return 0;
  }

我尝试使用cout而不是cs202:output,我尝试过使用和不使用命名空间cs202(这是分配的要求),并且我尝试使运算符重载函数成为类的成员函数而不是朋友的功能无济于事。

我错过了什么?感谢

2 个答案:

答案 0 :(得分:1)

我想你想要它到标准输出(到控制台)

int main()
{
    Rational fraction1(1, 4);

    std::cout << fraction1 << endl;

    return 0;
}

此外你不需要朋友。 “Friend”关键字仅在类

中使用
#include "rational.h"

namespace cs202{

std::ostream& operator<<(std::ostream& output, const Rational& cRational)
{
    output << cRational.m_numerator << "/" << cRational.m_denominator;
    return output;
}

}

答案 1 :(得分:0)

谢谢,我明白了。我不得不更改命名空间的{}的位置。