New to c++ and Overloading operators, unsure how to use the function
c++, operators, overloading
Solution
Change `Rational n1();` to `Rational n1;`. You've ran into the most vexing parse. `Rational n1();` does not instantiate a `Rational` object, but declares a function named `n1` which returns a `Rational` object.
Problem
Hi I am rather new to C++, I have just started learning it after learning some Java basics. I have pre-existing code were it has overloaded the `>>` operator, however after watching many tutorials and trying to understand the issue, I thought I would ask here. Rational cpp file: ``` #include "Rational.h" #include <iostream> Rational::Rational (){ } Rational::Rational (int n, int d) { n_ = n; d_ = d; } /** * Creates a rational number equivalent to other */ Rational::Rational (const Rational& other) { n_ = other.n_; d_ = other.d_; } /** * Makes this equivalent to other */ Rational& Rational::operator= (const Rational& other) { n_ = other.n_; d_ = other.d_; return *this; } /** * Insert r into or extract r from stream */ std::ostream& operator<< (std::ostream& out, const Rational& r) { return out << r.n_ << '/' << r.d_; } std::istream& operator>> (std::istream& in, Rational& r) { int n, d; if (in >> n && in.peek() == '/' && in.ignore() && in >> d) { r = Rational(n, d); } return in; }} ``` Rational.h file: ``` #ifndef RATIONAL_H_ #define RATIONAL_H_ #include <iostream> class Rational { public: Rational (); /** * Creates a rational number with the given numerator and denominator */ Rational (int n = 0, int d = 1); /** * Creates a rational number equivalent to other */ Rational (const Rational& other); /** * Makes this equivalent to other */ Rational& operator= (const Rational& other); /** * Insert r into or extract r from stream */ friend std::ostream& operator<< (std::ostream &out, const Rational& r); friend std::istream& operator>> (std::istream &in, Rational& r); private: int n_, d_;}; #endif ``` The function is from a pre-existing class called Rational which takes two `int`s as parameters. Here is the function to overload `>>` : ``` std::istream& operator>> (std::istream& in, Rational& r) { int n, d; if (in >> n && in.peek() == '/' && in.ignore() && in >> d) { r = Rational(n, d); } return in; } ``` And I'm trying to use it like this, after seeing a few tutorials. (The error I am getting is `"Ambiguous overload for operator>>` in `std::cin>>n1` : ``` int main () { // create a Rational Object. Rational n1(); cin >> n1; } ``` Like I said I'm new to this whole overloading operators thing, and figure someone here would be able to point me in the right direction on how to use this function.