2014-06-10 78 views
1

當編譯下面的代碼,我得到以下錯誤:C++錯誤,沒有匹配的功能

welcome.h:110:38: error: no matching function for call to 'Mesazhi::Mesazhi(int&, std::string&, int&, Mesazhi&, int&)'

我已經包括類文件和主文件。請檢查下面的代碼。

#include <ctime> 
#include <iostream> 
#include <list> 
#include <fstream> 
#include <stack> 

using namespace std; 
#ifndef _welcome_H 
#define _welcome_H 

class Mesazhi { 
    int id; 
    string pershkrimi; 
    int dita; 
    int muaji; 
    int viti; 

public: 
    Mesazhi (int ID, string p){ 
     id=ID; pershkrimi=p; 
     datasot(); 
    } 
    Mesazhi (int ID, string p, int d, int m, int v){ 
     id=ID; pershkrimi=p; dita=d; muaji=m; viti=v; 
    } 
    void datasot(){ 
     time_t t=time(0); 
     struct tm* tani=localtime(& t); 
     viti=tani->tm_year + 1900; 
     muaji=tani->tm_mon+1; 
     dita=tani->tm_mday; 
    } 

    int getDita() const { 
     return dita; 
    } 

    void setDita(int dita) { 
     this->dita = dita; 
    } 

    int getId() const { 
     return id; 
    } 

    void setId(int id) { 
     this->id = id; 
    } 

    int getMuaji() const { 
     return muaji; 
    } 

    void setMuaji(int muaji) { 
     this->muaji = muaji; 
    } 

    string getPershkrimi() const { 
     return pershkrimi; 
    } 

    void setPershkrimi(string pershkrimi) { 
     this->pershkrimi = pershkrimi; 
    } 

    int getViti() const { 
     return viti; 
    } 

    void setViti(int viti) { 
     this->viti = viti; 
    } 
}; 

class Menaxhim { 
    list <Mesazhi> lista; 
    stack <Mesazhi> mesazhet; 
public: 
    Menaxhim(){ 

    futje_dhena(); 
    } 
    void futje_dhena(){ 
     int id; string p; 
     while(!cin.eof()){ 
      cout<<"fusni mesazhet"<<endl; 
      cin>>id>>p; 
      Mesazhi njemesazh(id, p); 
      lista.push_back(njemesazh); 
     } 
    } 
    void shkrim_file(){ 
     fstream file("c:\\data\\mesazhet.txt"); 
     if(file.is_open()){ 
      list <Mesazhi>::iterator it; 
      for(it=lista.begin(); it!=lista.end(); it++){ 
       file<<it->getId()<<" "<<it->getPershkrimi()<<endl; 
      } 

     }else 
      cout<<"file ka probleme me shkrimin"; 

    } 

    void lexim() { 
     int id; string p; int d; int m; int v; 
     fstream file("c:\\data\\mesazhet.txt"); 
     while(!file.eof()){ 
      file>>id>>p>>d>>m>>v; 
      Mesazhi m (id, p, d, m, v); 
      mesazhet.push(m); 

    } 
    } 
    void afishim(){ 
     list<Mesazhi>::iterator it=lista.begin(); 
     for(;it!=lista.end();it++){ 
      cout<<it->GetId()<<" "<<it->getPershkrimi()<<endl; 
      cout<<mesazhet.top().GetId()<<" "<<mesazhet.top().getPershkrimi()<<" "<<mesazhet.top().getDita() 
        <<" "<<mesazhet.top().getMuaji()<<" "<<mesazhet.top().getViti() <<endl; 

     } 
    } 
}; 

#endif /* _welcome_H */ 


#include "welcome.h" 
    int main() { 
     Menaxhim mesazhet; 
     mesazhet.shkrim_file(); 
     mesazhet.lexim(); 
     mesazhet.afishim(); 
     return 0; 
    } 
+0

'while(!cin.eof())'不正確,如果發生'eof',那麼你將處理一個垃圾條目。如果讀取一個int失敗,你也會有一個無限循環。相反,檢查讀取是否成功。所有其他'while ... eof'循環相同。 –

回答

4

這裏

Mesazhi m (id, p, d, m, v); 

要建立一個新的Mesazhi與你沒有申報既不執行非默認的構造函數。

這是因爲你有

int m; 
while(!file.eof()) { 
    Mesazhi m(...); 
} 

所以你的內心m聲明陰影外面一個,m被認爲是類型Mezashi,不int的了。你應該把它重命名爲不同的東西,如

Mesazhi mesazhi(id,p,d,m,v); 

這是一個原因criptic變量名稱可能會導致問題:你甚至不知道你使用的是他們。 GCC支持警告-Wshadow,這有助於找到這些問題。

相關問題