我正在尝试为学校的作业任务工作,并且在任务要求之上进行了创新 -> 我创建了一个“列表”类。在添加“add()”方法到程序中以及“newIncomeTax()”方法后,我遇到了这两个错误:
错误 LNK2019:无法解析的外部符号“public: void __thiscall List::add(class IncomeTax *)”(?add@List@@QAEXPAVIncomeTax@@@Z),在函数_main driver.obj中引用
和
致命错误 LNK1120:1 个无法解析的外部
我希望这将足够让任何人帮助我:
注意:下面的函数不按原始代码中的顺序排列 (如果可能是问题,我可以提供我正在使用的所有代码)
错误 LNK2019:无法解析的外部符号“public: void __thiscall List::add(class IncomeTax *)”(?add@List@@QAEXPAVIncomeTax@@@Z),在函数_main driver.obj中引用
和
致命错误 LNK1120:1 个无法解析的外部
我希望这将足够让任何人帮助我:
注意:下面的函数不按原始代码中的顺序排列 (如果可能是问题,我可以提供我正在使用的所有代码)
list.h
#ifndef LIST_H
#define LIST_H
#include "IncomeTax.h"
class List
{
private:
IncomeTax * First;
IncomeTax * Last;
int num_in_list;
public:
List () { num_in_list = 0; First = NULL; Last = NULL; }
int get_num_in_list() { return num_in_list; }
IncomeTax * getFirst() { return First; }
IncomeTax * getLast() { return Last; }
void del_frnt ();
void push_front (IncomeTax *);
void push_back (IncomeTax *);
void del_last ();
void add (IncomeTax*);
IncomeTax * pop_back ();
IncomeTax * pop_front ();
IncomeTax * get (int);
};
#endif
注意:根据我所看到的,我所创建的列表与默认列表的行为类似。
list.cpp中的“add”方法
void List:: add (IncomeTax * IncomeTax_to_be_added) {
if (num_in_list == 0) { First = IncomeTax_to_be_added; Last = IncomeTax_to_be_added; }
else if (num_in_list != 0 ) {
Last->setNext(IncomeTax_to_be_added);
IncomeTax_to_be_added->setPrevous(Last);
Last = IncomeTax_to_be_added;
}
num_in_list++;
}
IncomeTax.h
#ifndef INCOME_TAX
#define INCOME_TAX
#include <iostream>
#include <string>
#include "conio.h"
#include <cassert>
using namespace std;
class IncomeTax {
private:
double incm;
double ajIncm;
double subtract;
double taxRate;
double add;
bool married;
void calcIncome_m ();
void calcIncome_s ();
public:
IncomeTax () { incm = 0; subtract = 0; taxRate = 0; add = 0; add = false; }
// married -> is by default false
void setmarried ( bool stats ) { married = stats; }
void setIncm (double in ) { incm = in; }
void setSubtract ( double sub ) { subtract = sub; }
void setTaxRate ( double rate ) { taxRate = rate; }
void setAdd ( double Add ) { add = Add; }
void setAjIncome ( double AJincome ) { ajIncm = AJincome; }
bool getmarried () { return married; }
double getIncm () { return incm; }
double getsubtract () { return subtract; }
double getTaxRate () { return taxRate; }
double getAdd () { return add; }
double getAJincome () { return ajIncm; }
void calcIncome ();
void pintIncome ();
};
#endif
IncomeTax.cpp
#include "IncomeTax.h"
using namespace std;
void IncomeTax::calcIncome(){
assert (incm != 0);
if (married) { calcIncome_m(); }
if (!married) { calcIncome_s(); }
ajIncm = (incm - subtract);
ajIncm -= (ajIncm * taxRate);
ajIncm += add;
}
void IncomeTax::calcIncome_m() {
assert (incm != 0);
... huge nested if statements ...
they set subtract, add, taxRate...
}
void IncomeTax::calcIncome_s() {
assert (incm != 0);
... huge nested if statements ...
they set subtract, add, taxRate...
}
void IncomeTax::pintIncome () {
assert (incm != 0);
assert (ajIncm != 0);
std::cout.precision(2);
cout << "\tTaxable Income: " << incm << endl;
cout << "\tAjusted Income: " << ajIncm << endl;
cout << "\tTax: " << (incm - ajIncm) << "\n" << endl;
}
Driver.cpp
#include <conio.h>
#include <iostream>
#include <string>
#include <cassert>
#include "IncomeTax.h"
#include "List.h"
using namespace std;
void getMaritalStatus( IncomeTax new_tax) {
bool done = false;
char stt = ' ';
while ( !done ) {
cout << "\nPlease declare weather you are filing taxes jointly or single" << "\n";
cout << "\t's' = single\n\t'm' = married" << endl;
stt = getch();
if ( stt == 's' || stt == 'm' ) { done = true; }
if ( stt == 's' ) { new_tax.setmarried(true); }
if ( ! (stt == 's' || stt == 'm') ) { cout << "\nyou have entered an invald symbol... \n" << endl; }
if(cin.fail()) { cin.clear(); }
}
}
void get_Income ( IncomeTax new_tax) {
double _incm = 0;
char status = ' ';
bool done = true;
while ( done ) {
cout << "Please enter your TAXABLE INCOME:" << endl;
cin >> _incm;
if ( _incm > 0 ) { new_tax.setIncm(_incm); done = false; }
if ( _incm <= 0 ) { cout << "\nthe number you entered was less than zero\nplease enter a valad number...\n" << endl; }
if(cin.fail()) { cin.clear(); }
}
}
IncomeTax newIncomeTax () {
IncomeTax new_tax;
IncomeTax * temp;
get_Income(new_tax);
getMaritalStatus(new_tax);
new_tax.calcIncome();
return new_tax;
}
bool again () {
bool done = false, answer = false;
char yn = ' ';
while ( !done ) {
cout << "\nWould you like to calculate another Income tax? (y/n)" << endl;
yn = getch();
if ( yn == 'y' || yn == 'n' ) { done = true; }
if ( yn == 'y' ) { return false; }
if ( yn == 'n' ) { return true; }
if ( ! (yn == 's' || yn == 'n') ) { cout << "\nyou have entered an invald symbol... \n" << endl; }
if(cin.fail()) { cin.clear(); }
}
}
int main () {
IncomeTax new_tax;
List L;
bool done = false;
while (!done) {
IncomeTax temp = newIncomeTax();
IncomeTax * ptr = &temp;
L.add(ptr);
done = again();
};
return 0;
};
我知道有许多更好的方法来使用“if”语句 -> 我只是决定使用if语句会更有效率 -> 教授已经说过没有必要超越这个范围。
由于这是作业,我希望能得到一些关于如何使用更好的编程技巧的反馈。谢谢!
我正在使用VS Express 2008 C++。