LNK2019 error with simple class

1.3k views Asked by At

(Sorry, I know there are many, many posts about this error, but none of them seem to have as simple a program as I'm trying to build. I apologize, but I don't know enough about C++ to figure out how to use the other questions to my advantage.)

I'm building a simple calculator program based on defining and initializing a class for my C++ course. I think that I'm nearly finished, but I keep getting an error:

Driver.obj : error LNK2019: unresolved external symbol "public: __thiscall >Calculator::Calculator(void)" (??0Calculator@@QAE@XZ) referenced in function >_main

I think it has something to do with my default constructor, but can anyone help me out? I appreciate any help I can get!

code following:

Calculator.cpp

#include <string>
#include <iostream>
#include "Calculator.h"

using namespace std;

void Calculator::SetOperation(char oper, double opa, double opb)
{
    Calculator::operation = oper;
    Calculator::op1 = opa;
    Calculator::op2 = opb;
}

void Calculator::Calc()
{
    switch(operation)
        {
        case ('+'):
            answer = op1 + op2;
            result = "Your operation is addition: " + to_string(op1) + " + " + to_string(op2) + " = " + to_string(answer) + '\n';
            break;

        case ('-'):
            answer = op1 - op2;
            result = "Your operation is subtraction: " + to_string(op1) + " - " + to_string(op2) + " = " + to_string(answer) + '\n';
            break;

        case ('*'):
            answer = op1 * op2;
            result = "Your operation is multiplication: " + to_string(op1) + " * " + to_string(op2) + " = " + to_string(answer) + '\n';
            break;

        case ('/'):
            answer = op1 / op2;
            result = "Your operation is division: " + to_string(op1) + " / " + to_string(op2) + " = " + to_string(answer) + '\n';
            break;
        }
}

string Calculator::GetResults()
{
    return result;
}

Calculator.h

#ifndef _CALCULATOR_H_
#define _CALCULATOR_H_

#include <string>

using namespace std;

class Calculator
{
private:
    char operation;
    double op1;
    double op2;
    double answer;
    string result;
    void Calc();
public:
    Calculator();
    void SetOperation(char oper, double opa, double opb);
    string GetResults();
};

#endif

Driver.cpp

//

#include <string>
#include <iostream>
#include "Calculator.h"
#include "Functions.h"

using namespace std;

int main()
{
    char op;
    double numA, numB;
    string ing, correct("no"), equals, another("no");
    Header();

    Calculator MyCalc;

    do
    {
        do
        {
            cout<< "Enter the number of an operator from the following:\n\n"
                << "Addition (+):        1      Subtraction (-):  2\n"
                << "Multiplication (*):  3      Division (/):     4\n\n";
            cin >> op;
            cin.ignore();
            switch(op)
            {
            case (1):
                op = '+';
                cout<< "\n\nLet's do some addition!\n\n";
                ing = "adding";
                break;
            case (2):
                op = '-';
                cout<< "\n\nLet's do some subtraction!\n\n";
                ing = "subtracting";
                break;
            case (3):
                op = '*';
                cout<< "\n\nLet's do some multiplication!\n\n";
                ing = "multiplying";
                break;
            case (4):
                op = '/';
                cout<< "\n\nLet's do some division!\n\n";
                ing = "dividing";
                break;
            }

            cout<< "Please enter your first operand: ";
            cin >> numA;
            cin.ignore();

            cout<< "\n\nPlease enter your second operand: ";
            cin >> numB;
            cin.ignore();

            if (op == '/' && numB == 0)
            {
                cout<< "!!!!!     ILLEGAL OPERATION\n!!!!!     Can't divide by zero!";
                correct = "no";
            }
            else
            {
                cout<< "We'll be " << ing << ' ' << numA << " and " << numB << ", correct?\n<yes/no>>> ";
                getline(cin, correct);
            }

        } while(correct != "yes");

    MyCalc.SetOperation(op, numA, numB);
    equals = MyCalc.GetResults();
    cout<< "\n\n" << equals;

    cout<< "\n\n\nWould you like to perform another calculation?\n<yes/no>>>";
    } while (another != "no");
}

Functions.h

#ifndef _FUNCTIONS_H_
#define _FUNCTIONS_H_

void Header();

#endif

Functions.cpp

#include <string>
#include <iostream>
#include "Functions.h"

using namespace std;

void Header()
{
    do
    {
    cout<< "blah blah blah";
    } while(cin.get() != '\n');
}
1

There are 1 answers

1
Michał Trybus On BEST ANSWER

You have declared the constructor in Calculator.h but have not defined it in Calculator.cpp (or anywhere else).

Adding

Calculator::Calculator() { }

to Calculator.cpp will fix the issue.