30/09/2018, 20:41
Thắc mắc về linked list (p2)
Em đã sửa lại code rồi mà vẫn bị lỗi tùm lum.
Em vẫn thắc mắc:
- Cách khai báo để lấy ra mssv, name, next của 1 object?
- Tạu sao phải có const ở con trỏ? Tại sao phải dùng reference cho name?
- Tại sao phải dùng currentsv-> createname(i)? Trong clip thì không cần viết như vậy. Mà lại không thấy được hàm createname :((
- Có cần phải declare lại các biến bên cpp ko? Tại sao cứ báo lỗi hoài T.T
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,sinhvien*const next=0);
std::string createname(int n);
void setNext(sinhvien*const other);
int mssv();
std::string name();
sinhvien*next();
protected:
private:
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_;
}
sinhvien*next() const
{
return next_;
}
void setnext(sinhvien*const other)
{
next_=other;
}
string createname(int n)
{
return "sv"+"n";
}
sinhvien::~sinhvien()
{
next_=0;
}
main.cpp:
include
include
include "sinhvien.h"
int main()
{
sinhvien*first=new sinhvien(1,"sv 1",0);
sinhvien*currentsv=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;
}
Bài liên quan





Mình nghĩ là bạn thiếu
sinhvien::trước mấy hàm trong sinhvien.cpp(cái :: là toán tử vùng miền gì đó mình không nhớ rõ)
Trong sinhvien.h bạn đã bỏ những biến trong private ra public bạn chỉ cần 1 trong 2 cái đó thôi.
em cũng nghĩ như vậy.
vì ở đây currentsv là 1 biến con trỏ. Và trong C/C++ thì khi muốn gọi thủ tục của object thông qua con trỏ, đầu tiên phải dereference con trỏ đó trước, tức là phải thực hiện như sau
(*currentsv).creatname(i);nhưng viết như vậy sẽ khá xấu nên do đó có 1 cách viết khác là
currentsv->creatname(i);cả 2 cách viết trên đều như nhau.
Khi dùng tham chiếu bạn có thể sửa đối tượng được tham chiếu, vì vậy phải dùng
const. Với class phải có const method với prototype kết thúc bằngconst.