Неопределенные символы для архитектуры x86_64: «оператор <<» - PullRequest
0 голосов
/ 24 февраля 2019

Я пытаюсь перегрузить оператор <<, чтобы вывести класс рационального числа, который представляет собой рациональное число. </p>

Функция выглядит так:

ostream &operator<<(ostream &os, const rational_t& r)
{ 
   os << r.get_num() << "/" << r.get_den() << "=" << r.value() << endl;
   return os;
} 

Хорошо компилируется без использования.Но когда я пытаюсь использовать его на главной странице, он жалуется так: неопределенные символы для архитектуры x86_64: "operator << (std :: __ 1 :: basic_ostream> &, рациональный_t const &)"

Есть идеи?Спасибо!

main:

#include <iostream>

#include <cmath>
#include <vector>

#include "rational_t.hpp"

using namespace std;

int main()
{

cout << a; // Problem here..

}

Класс cpp:

#include <iostream>
#include <math.h>
#include <fstream>

#include "rational_t.hpp"

rational_t::rational_t(const int n, const int d)
{
    assert(d != 0);
    num_ = n, den_ = d;
}

// Other class methods here..

ostream &operator<<(ostream &os, rational_t &r)
{
    os << r.get_num() << "/" << r.get_den() << "=" << r.value() << endl;
    return os;
}

Класс hpp:

#pragma once

#include <iostream>
#include <cassert>
#include <cmath>
#include <fstream>

#define EPSILON 1e-6

using namespace std;

class rational_t
{
  int num_, den_;

public:
  rational_t(const int = 0, const int = 1);
  ~rational_t() {}

// Other methods like get_num(), get_den(), set... HERE

rational_t operator+(const rational_t&);
rational_t operator-(const rational_t&);
rational_t operator*(const rational_t&);
rational_t operator/(const rational_t&);

void write(ostream &os = cout) const;
void read(istream &is = cin);

friend ostream &operator<<(ostream &os, const rational_t&);

};
...