【发布时间】:2014-02-13 04:53:58
【问题描述】:
更新:我在下面进行了 Sergii 的更改,但现在我收到错误:未定义引用 `cs202::operator&, cs202::Rational const&)'。任何想法如何解决这一问题?谢谢
如果我能帮助我弄清楚为什么会出现此错误,我将不胜感激: “错误:‘输出’不是命名空间‘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
覆盖
#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(这是赋值的要求),并且我尝试过使运算符重载函数成为类的成员函数而不是好友功能无济于事。
我错过了什么?谢谢
【问题讨论】:
-
错误似乎很清楚,我没有看到
output在cs202命名空间中的任何地方定义 -
而不是 cs202::output,它应该是 std::cout 或 cout(如果您包含 using std 语句。
-
请学会阅读错误信息。
标签: c++ class compiler-errors operator-overloading