编译下面的代码时,出现以下错误:
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;
}
最佳答案
这里
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);
这就是为什么乱七八糟的变量名会导致问题的原因:您甚至没有意识到自己正在使用它们。 GCC 支持有助于发现此类问题的警告 -Wshadow
。
关于C++错误,没有匹配的函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24152029/