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 ạ.



83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?