0

I'm trying to compile the following code:

Numero.h

#include <iostream>

using namespace std;

class Numero {
public:
    explicit Numero(double n) : n(n) {};
    Numero operator+(const Numero& n2);
    Numero operator-(const Numero& n2);
    Numero operator*(const Numero& n2);
    Numero operator/(const Numero& n2);
    friend std::ostream& operator<<(std::ostream& os, const Numero& n);

private:
    double n;
};

Numero.cpp

#include "Numero.h"

Numero Numero::operator+(const Numero& n2) {
    return Numero{ n + n2.n };
}

Numero Numero::operator-(const Numero& n2) {
    return Numero{ n - n2.n };
}

Numero Numero::operator*(const Numero& n2) {
    return Numero{ n * n2.n };
}

Numero Numero::operator/(const Numero& n2) {
    return Numero{ n / n2.n };
}

std::ostream& operator<<(std::ostream& os, const Numero& n) {
    os << n.n;
    return os;
}

NumeroTestes.cpp

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

using namespace std;

int main()
{
    Numero n1{0};

    cout << n1 << endl;

    return 0;
}

Generates the following error:

Undefined symbols for architecture x86_64:
"operator<<(std::__1::basic_ostream

&, Numero const&)", referenced from: _main in NumeroTestes-5aa3e1.o ld: symbol(s) not found for architecture x86_64 clang: error: linker command failed with exit code 1 (use -v to see invocation)

Victor Ribeiro
  • 577
  • 7
  • 20

0 Answers0