I am trying to write a Cubic class that performs operations on polynomials of degree 3. When attempting to overload the + operator to return a new Cubic object, it gives me a LNK2019 error:
"unresolved external symbol "public: __thiscall Cubic::Cubic(void)" (??0Cubic@@QAE@XZ) referenced in function "public: class Cubic const __thiscall Cubic::operator+(class Cubic)" (??HCubic@@QAE?BV0@V0@@Z)"
I've tried looking at whether my function declarations are different from my definitions but they are all the same. I believe the problem is in the overloaded operator because I tried modifying each coefficient using rhs.coefficient[i] += coefficient[i] and returning rhs and that worked fine. The reason why I want to return a new Cubic is because it seems more correct and also because it would make it easier to implement the - operator as well.
Cubic.h file
#include <iostream>
using namespace std;
    class Cubic
    {
    public:
        // Default constructor
        Cubic();
        // Predetermined constructor
        Cubic(int degree3, int degree2, int degree1, int degree0);
        // Return coefficient
        int getCoefficient(int degree) const;
        // Addition op
        const Cubic operator+(Cubic rhs);
        // Output operators
        friend ostream& operator<<(ostream& outStream, const Cubic& cubic);
    private:
        int coefficient[4];
    };
Cubic.cpp
#include "Cubic.h"
#include <iostream>
using namespace std;
Cubic::Cubic(int degree3, int degree2, int degree1, int degree0)
{
    coefficient[3] = degree3;
    coefficient[2] = degree2;
    coefficient[1] = degree1;
    coefficient[0] = degree0;
}
int Cubic::getCoefficient(int degree) const
{
    return coefficient[degree];
}
const Cubic Cubic::operator+(Cubic rhs)
{
    Cubic result;
    for (int i = 3; i >= 0; i--)
    {
        result.coefficient[i] = coefficient[i] + rhs.coefficient[i];
    }
    return result;
}
ostream& operator<<(ostream& outStream, const Cubic& cubic) {
    outStream << showpos << cubic.getCoefficient(3) << "x^(3)"
        << cubic.getCoefficient(2) << "x^(2)"
        << cubic.getCoefficient(1) << "x"
        << cubic.getCoefficient(0);
    return outStream;
}
Test.cpp
#include "Cubic.h"
#include <iostream>
using namespace std;
int main()
{
    Cubic lhs(3, 1, -4, -1);
    Cubic rhs(-1, 7, -2, 3);
    /* TESTS */
    cout << "Addition using + operator" << endl;
    cout << lhs + rhs << endl;
    return 0;
}
The expected result should be +2x^(3)+8x^(2)-6x+2.
 
    