2014-06-10 120 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,这有助于找到这些问题。

相关问题