2012-08-26 46 views
0

我有3個文件:錯誤LNK1169:一個或多個多重定義的符號發現

SilverLines.h 
SilverLines.cpp 
main.cpp 

在SilverLines.cpp我:

#include "SilverLines.h." 

如果我不這樣做:

#include "SilverLines.h" 

在main.cpp,一切都很好。該項目編譯。

但是當我做:

#include "SilverLines.h" 

在main.cpp中(我需要做的),我得到這2個錯誤:

fatal errors

什麼問題?

>編輯:

根據你的要求,這是整個的* .h代碼:

#ifndef SILVER_H 
#define SILVER_H 

#include <iostream> 
#include <algorithm> 
#include <iterator> 
#include <vector> 
#include <string> 
#include <map> 

using namespace std; 

typedef unsigned short int u_s_int; 

map<string /*phone*/,string /*company*/> companies; // a map of a phone number and its  company 
string findCompany(const string& phoneNum); //Given a phone number, the function  returns the right company 

//摘要客戶端類:

class AbsClient //Abstract Client Class 
{ 
protected: 
//string phone_number; 
int counter; //CALL DURATION TO BE CHARGED 
double charge; 
public: 
string phone_number; //MOVE TO PROTECTED LATER 
void setCharge(double ch) {charge=ch;} 
void setCoutner(int count) {counter=count;} 
AbsClient(string ph_num): phone_number(ph_num),counter(0), charge(0.0) {} //c'tor  that must be given a phone#. 
                      //Initializes the counter and the charge to 0. 
virtual void registerCall(string /*phone#*/, int /*minutes*/) = 0; //make a call  and charge the customer 
void printReport(string /*phone#*/) const; //prints a minutes report 
}; 

//該臨時客戶端類別:

class TempClient : public AbsClient //TempClient class (NO DISCOUNT!) 2.3 NIS PER MINUTE, inherits from ABS 
{ 
private: 
string company; 
public: 
//string company; 
TempClient(string ph_num, string cmp_name): AbsClient(ph_num), company(cmp_name) {} 
virtual void registerCall(string /*phone#*/, int /*minutes*/); //make a call and  charge the customer 
//virtual void printReport(string phone) const {cout << "the number of minutes: " << this->counter << endl;} 
}; 

//註冊的客戶端類:

class RegisteredClient : public AbsClient //RegisteredClient, 10% DISCOUNT! , inherits from ABS 
{ 
protected: 
string name; 
string id; 
long account; //ACCOUNT NUMBER 
private: 
static const int discount = 10; //STATIC DISCOUNT OF 10% FOR ALL Registered Clients 
public: 
RegisteredClient(string ph_num, string n, string i, long acc_num):  AbsClient(ph_num), name(n) , id(i) , account(acc_num) {} 
virtual void registerCall(string /*phone#*/, int /*minutes*/); //make a call and  charge the customer 
//virtual void printReport(string /*phone#*/) const {cout << "the number of  minutes: " << this->counter << endl;} 
}; 

//貴賓客戶端類

class VIPClient : public RegisteredClient //VIP Client! X% DISCOUNT! also, inherits from RegisteredClient 
{ 
private: //protected? 
int discount; //A SPECIAL INDIVIDUAL DISCOUTN FOR VIP Clients 
public: 
VIPClient(string ph_num, string n, string i, long acc_num, int X):  RegisteredClient(ph_num,n,i,acc_num), discount(X) {} 
virtual void registerCall(string /*phone#*/, int /*minutes*/); //make a call and  charge the customer 
//virtual void printReport(string /*phone#*/) const {cout << "the number of  minutes: " << this->counter << endl;} 
}; 

//該SilverLines(公司)類

class SilverLines // The Company Class 
{ 
protected: 
vector<AbsClient*> clients; 
vector<string> address_book; //DELETE 
public: 
//static vector<AbsClient*> clients; 
//SilverLines(); 
void addNewClient(string /*phone#*/); 
void addNewClient(string /*phone#*/, string /*name*/ , string /*id*/ , u_s_int  /*importance lvl*/ , long /*account#*/); 
void registerCall(string /*phone#*/ , int /*call duration*/); 
void resetCustomer(string /*phone#*/); //given a phone#, clear the appropriate  customer's data ('charge' and 'counter') 
void printReport(string /*phone#*/) const; 

~SilverLines(){ 
    vector<AbsClient*>::iterator it; 
    for(it = clients.begin(); it != clients.end(); ++it) 
     delete(*it); 
} 
}; 

#endif 

paercebal的答案:

你的代碼有多個問題(

using namespace std;

一),但一個失敗的編譯是在頭一個全局變量的聲明:

map<string /*phone*/,string /*company*/> companies; 

我敢肯定你的大部分源(的main.cpp和SilverLines。 cpp,至少)包括這個頭文件。

您應該在一個源文件中定義您的全局對象:

// SilverLines。^ h

extern map<string /*phone*/,string /*company*/> companies; 

,然後在頭宣佈它(爲外部):

// global.cpp

extern map<string /*phone*/,string /*company*/> companies; 
+0

您的代碼有錯誤。 –

+0

一旦解決了錯誤,您可能還需要[include guard](http://stackoverflow.com/a/10990521/275567)_SilverLines.h_。 – pb2q

+0

@ pb2q我已經在使用包括守衛。 –

回答

0

謝謝你們我的工作了:現在

findCompany()是一個全球性的功能,並且map<string,string> companies是裏面一個static場。它編譯偉大。

0

機會是你的 「SilverLines.h」 實際上確實定義的東西,而不是僅僅聲明它。我不打算嘗試解密錯誤信息,但:-)

+0

* .h文件中沒有定義。 –

+0

@AdamDe - 有一個定義,它是錯誤消息抱怨的名稱。 –

0

您的代碼中可能有其他錯誤。 也確保你沒有在.h文件中編寫你的主要代碼或任何其他代碼。 .h文件應該只包含函數的原型,後跟一個分號。

+0

我提到過,我確實在cpp中包含了標題... –

+0

不錯。 是錯誤還在嗎? 你只在頭文件中放置了聲明嗎? 如果可能,請張貼完整的源代碼。 –

+0

我編輯這篇文章並添加了整個代碼。檢查出它 –

0

似乎由於包含SilverLines.h兩次而出現了一些多重定義。 P1。在你的SilverLines.h頭文件中使用像下面的頭文件,然後解釋它。

這可能有幫助。

#ifndef SILVER_H 
#define SILVER_H 

//Write the contents of SilverLines.h here. 

#endif // SILVER_H 
+0

它仍然無法正常工作...相同的錯誤 –

+0

@AdamDe,頁。檢查此鏈接獲取一些更多的提示來解決這個http://msdn.microsoft.com/en-us/library/72zdcz6f%28v=vs.80%29.aspx –

相關問題