2015-06-10 6 views
1

(Извините, я знаю, что есть много, много сообщений об этой ошибке, но ни одна из них, похоже, не имеет такой простой программы, как я пытаюсь построить. Прошу прощения, но я не достаточно знаю о C++, чтобы выяснить, как использовать другие вопросы в свою пользу.)Ошибка LNK2019 с простым классом

Я создаю простую программу калькулятора, основанную на определении и инициализации класса для моего курса на C++. Я думаю, что я почти закончил, но я получаю сообщение об ошибке:

Driver.obj : error LNK2019: unresolved external symbol "public: __thiscall >Calculator::Calculator(void)" ([email protected]@[email protected]) referenced in function >_main

Я думаю, что это что-то делать с моим конструктором по умолчанию, но может кто-нибудь помочь мне? Я ценю любую помощь, которую я могу получить!

код следующим образом:

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'); 
} 

ответ

2

Вы объявили конструктор в Calculator.h, но не определили его в Calculator.cpp (или где-либо еще).

Добавление

Calculator::Calculator() { } 

к Calculator.cpp будет решить проблему.

+0

Я бы голосовал, если бы мог, это было именно то, что мне было нужно, но другие размещенные вопросы были слишком сложными, чтобы разобрать мои ограниченные знания в программировании. Благодаря! – ThatGuy01001010