C++错误,没有匹配的函数

标签 c++ function class netbeans matching

编译下面的代码时,出现以下错误:

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/

相关文章:

c++ - 读/写 unicode c++

c - 在函数上使用 typedef

php - 如何在php中获得大于0的最小正值

javascript - 我的函数只是用实体名称替换其中两个字符?

mysql - 用户首选项/设置的 ERD

c++ - 使用assert帮助编译器更好的优化

c++ - 将 reinterpret_cast 转换为 C 样式数组是否非法 C++11?

c++ - 虚函数和纯虚函数的区别?

javascript - jQuery - 自行更改类

c++ - 在类模板中重载运算符