30/09/2018, 20:43
Thắc mắc lỗi no matching function?
Chào mọi người, em đang tạo 1 class theo c++ để khai báo mssv, name và con trỏ của một linked list.
Khi chạy thì bị báo lỗi là constructor no matching và hàm sinhvien bị nhận lầm là (int, char[4], int). Làm sao để khắc phục ạ?
Toàn bộ code của em:
sinhvien.h
#ifndef SINHVIEN_H
#define SINHVIEN_H
#include <string>
class sinhvien
{
public:
sinhvien(int mssv,std::string &name,sinhvien*const next_=0);
void setNext(sinhvien*const next);
sinhvien*addNext(sinhvien*const next);
int getMssv()const;
std::string getName()const;
sinhvien*getNext()const;
bool hasNext()const;
virtual ~sinhvien();
protected:
private:
int mssv_;
std::string name_;
sinhvien*next_;
};
#endif // SINHVIEN_H
sinhvien.cpp:
#include "sinhvien.h"
#include <iostream>
sinhvien::sinhvien(int mssv,const std::string &name,sinhvien*const next_=0)
{
mssv_=mssv;
name_=name;
next_=next;
}
void sinhvien::setNext(sinhvien*const next)
{
std::cout<<mssv_<<""<<name_<<" -> "<<next->mssv_<<""<<next->name_<<std::endl;
this->next_=next;
}
sinhvien*sinhvien::addNext(int mssv,std::string ==&name,sinhvien*const next)
{
sinhvien*newsv = new sinhvien(mssv,name,next);
this->next_=newsv;
std::cout<<mssv_<<""<<name_<<" -> "<<next->mssv_<<""<<next->name_<<std::endl;
return newsv;
}
int sinhvien::getMssv()const
{
return this->mssv_;
}
std::string sinhvien::getName()const
{
return this->name_;
}
sinhvien*sinhvien::getNext()const
{
if(hasNext())
{
return this->next_;
}
else
return 0;
}
bool sinhvien::hasNext()const
{
return this->next_==0;
}
sinhvien::~sinhvien()
{
//dtor
}
main.cpp:
#include <iostream>
#include "sinhvien.h"
#include <string>
std::string createname(int n)
{
return "sv"+n;
}
int main()
{
sinhvien*first=new sinhvien(1,"sv1",0);
sinhvien*currentsv=first;
for(int i=2;i<5;i++)
{
std::string name=createname(i);
sinhvien*newsv=new sinhvien(i,name,0);
currentsv->setNext(newsv);
currentsv=newsv;
}
return 0;
}
em cảm ơn ạ.
Bài liên quan
Nếu bạn khai báo constructor có tham số thì phải khai báo constructor mặc định nữa !! Trong CT , nếu k khai báo constructor thì khi chạy nó tự tạo constructor mặc định . Một khi đã khai báo constructor có tham số thì phải khai báo constructor mặc định ! Theo mình là vậy
thêm
sinhvien()
vào xem !Em đã thêm và vẫn không được ạ. Anh có thể chạy thử code em được không?
Hiện tại em đã sửa lại code ở hàm main.cpp thành
std::string x=“sv1”;
sinhvien*first=new sinhvien(1,x,0);
Thì chỗ đó không báo lỗi nữa nhưng lại nhảy qua hàm sinhvien.cpp báo lỗi là prototype sinhvien doesnt match any in class