我真的无法理解为什么我会遇到这些错误,尤其是当我有包含保护时。以下是我的错误信息(请忽略我电脑的名称):
1> main.obj: error LNK2005:“class std :: basic_ostream >&__cdecl operator <<(class std :: basic_ostream >&,class Date&)”(?? 6@YAAAV?$ Basic_ostream @ DU?$ Char_traits @ D @ std @@ @ std @@ AAAV01 @ AAPAVDate @@ @ Z)已在loan.obj中定义。
1> main.obj: error LNK2005:“class std :: basic_ostream >&__cdecl operator <<(class std :: basic_ostream >&,class Loan&)”(?? 6@YAAAV?$ Basic_ostream @ DU?$ Char_traits @ D @ std @@ @ std @@ AAAV01 @ AAPAVLoan @@ @ Z)已在loan.obj中定义。
1> C:\ Users \ SweetAssSarah \ Documents \ Visual Studio 2012 \ Projects \ ConsoleApplication4 \ Debug \ a1.exe:致命错误LNK1169:找到一个或多个重复定义的符号。
这是我的四个文件: Main.cpp:
1> main.obj: error LNK2005:“class std :: basic_ostream >&__cdecl operator <<(class std :: basic_ostream >&,class Date&)”(?? 6@YAAAV?$ Basic_ostream @ DU?$ Char_traits @ D @ std @@ @ std @@ AAAV01 @ AAPAVDate @@ @ Z)已在loan.obj中定义。
1> main.obj: error LNK2005:“class std :: basic_ostream >&__cdecl operator <<(class std :: basic_ostream >&,class Loan&)”(?? 6@YAAAV?$ Basic_ostream @ DU?$ Char_traits @ D @ std @@ @ std @@ AAAV01 @ AAPAVLoan @@ @ Z)已在loan.obj中定义。
1> C:\ Users \ SweetAssSarah \ Documents \ Visual Studio 2012 \ Projects \ ConsoleApplication4 \ Debug \ a1.exe:致命错误LNK1169:找到一个或多个重复定义的符号。
这是我的四个文件: Main.cpp:
#ifndef _main_cpp
#define _main_cpp
#include<iostream>
#include "loan.h"
#include "date.h"
using namespace std;
void main(){
const int MAX_SIZE = 80;
char response[MAX_SIZE];
Loan sarah("Sarah", "123 Awesomeville ", Date (01,February,2010));
cout << sarah.getName() << " address: " << sarah.getAddress() << endl;
cout << "Date: " << sarah.getDate() << endl;
//keep console open until user types a key and enter
cout <<"\n\n" << "Press ENTER to continue";
cin.getline(response, MAX_SIZE);
return;
}
#endif
loan.cpp:
#ifndef _loan_cpp
#define _loan_cpp
#include <iostream>
#include "loan.h"
#include "date.h"
using namespace std;
Loan::Loan(char * aName, char * anAddress, Date aDate){
name = aName;
address = anAddress;
date = aDate;
cout <<"CONSTRUCTING: " << name << "\n";
}
Loan::~Loan(){
cout << "DESTRUCTING: " << name << endl;
}
char * Loan::getName() {return name;}
char * Loan::getAddress(){return address;}
Date Loan::getDate(){return date;}
void Loan:: printOn(ostream & ostr) {
cout << name << " address: " << address << endl;
}
#endif
loan.h:
#ifndef _loan_h
#define _loan_h
#include <math.h> //for the pow() function to do exponentiation
#include <iostream>
#include "date.h"
using namespace std;
class Loan{
public:
Loan(char *, char *, Date );//constructor
~Loan();
char * getName();
char * getAddress();
Date getDate();
void printOn(ostream & ostr);
private:
char * name;
char * address;
Date date; //requires class Date to have a default constructor
};
ostream & operator<<(ostream & ostr, Loan & aLoan) {
aLoan.printOn(ostr);
return ostr;
}
#endif
date.h:
#ifndef _date_h
#define _date_h
#include <iostream>
enum Month {January=1, February, March, April, May, June, July, August,
September, October, November, December};
using namespace std;
class Date{
public:
// Date() {};
Date(int aDay = 1, Month aMonth = May, int aYear = 2005){
day = aDay;
month = aMonth;
year = aYear;
}
void printOn(ostream & o){
o << day << "/" << month << "/" << year;
}
private:
int day;
Month month;
int year;
};
ostream & operator<<(ostream & ostr, Date & d) {
d.printOn(ostr);
return ostr;
}
#endif
Please help!
inline
对我有用(在cpp
中)。仍在考虑为什么。 - Richard Peck