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)