Hỏi về linked list?
Thân chào mọi người, hiện tại em đang học c++ theo các bài hướng dẫn của anh Lê Trần Đạt, tới bài về link list thì không chạy được nên muốn hỏi ạ.
Trước hết em đưa code của mình để mọi người xem sai chỗ nào giúp em sửa với. Máy thì báo là: “No matching function for call to 'sinhvien::sinhvien(int,const char[5], int” em chẳng hiểu gì luôn.
code của em
sinhvien.h:
#ifndef SINHVIEN_H
#define SINHVIEN_H
#include <string>
class sinhvien
{
public:
void sinhvien();
void createnamesv();
protected:
private:
int mssv_;
std:: string name_;
sinhvien*next_;
};
#endif //
sinhvien.cpp:
#include "sinhvien.h"
#include <string>
sinhvien::sinhvien(int mssv,const std::string &name,sinhvien*const next_=0)
{
mssv_=mssv;
name_=name;
Sinhvien*next_=next;
}
string createnamesv(int n)
{
return "sv"+"n";
}
main.cpp:
#include <iostream>
#include <string>
#include "sinhvien.h"
using namespace std;
int main()
{
sinhvien*first=new sinhvien(1,"sv 1",0);
Sinhvien*currentsv=first;
for(int i=2;i<5;i++)
{
std::string namesv=createnamesv(i);
Sinhvien*NewSV=(i,namesv,0);
currentsv->setnext(NewSV);
currentsv=NewSV;
}
return 0;
}
Nói chung bài này em cũng không hiểu lắm nên code sai chắc cũng nhiều. Có gì mọi người giúp em với ạ. Ngoài ra em thắc mắc xíu: tại sao phải khai báo là const std::string &name mà không khai báo thẳng là string name, cũng như tại sao là const next ạ?
Em xin cảm ơn.
Xem kỹ lại video đi. Vì code này của b sai quá nhiều =))~
void sinhvien();
constructor thì không phải để kiều void đâu. (ở file sinhvien.h)sinhvien::sinhvien(int mssv,const std::string &name,sinhvien*const next_=0)
mà hàm này lại chưa khai báo ởsinhvien.h
sinhvien.h
đang khai báo làvoid createnamesv();
trong khi ở sinhvien.cpp lại implementstring createnamesv(int n)
std::string namesv=createnamesv(i);
bạn không thể gọi trực tiếp hàmcreatenamesv(i)
được mà phải thông qua object của nó ví dụ :std::string namesv= currentsv->createnamesv(i);
currentsv->setnext(NewSV);
mà bạn chưa có hàmsetnext(NewSV);
sinhvien
!=Sinhvien
ở main.cpp bạn đang dùng nhiều thằngSinhvien
sửa hết lại làsinhvien
điDạ em đã sửa lại code rồi mà vẫn bị lỗi tùm lum.
Em vẫn thắc mắc:
Lỗi hiện tại: non-member function ‘int mssv()’ cannot have cv-qualifier.
Em cảm ơn.
Code mới đây ạ:
sinhvien.h:
#ifndef SINHVIEN_H
#define SINHVIEN_H
#include
class sinhvien
{
public:
sinhvien(int mssv,const std::string &name,sinhvienconst next=0);
std::string createname(int n);
void setNext(sinhvienconst other);
int mssv();
std::string name();
sinhvien*next();
};
#endif // SINHVIEN_H
sinhvien.cpp
#include “sinhvien.h”
#include
sinhvien::sinhvien(int mssv,const std::string &name,sinhvien*const next)
{
mssv_=mssv;
name_=name;
next_=next;
}
int mssv()const
{
return mssv_;
}
string name() const
{
return name_;
}
sinhviennext() const
{
return next_;
}
void setnext(sinhvienconst other)
{
next_=other;
}
string createname(int n)
{
return “sv”+“n”;
}
sinhvien::~sinhvien()
{
next_=0;
}
main.cpp:
#include
#include
#include “sinhvien.h”
int main()
{
sinhvienfirst=new sinhvien(1,“sv 1”,0);
sinhviencurrentsv=first;
for(int i=2;i<5;i++)
{
std::string name=currentsv->createname(i);
sinhvien*newSV=(i,name,0);
currentsv->setNext(newSV);
currentsv=newSV;
}
return 0;
}