30/09/2018, 20:11

Chương trình Ví dụ bị lỗi và không thể chạy được

Mình tự học C++ và học đến phần Đối tượng trong C++ của Lập Trình Tân Binh
Link giáo trình của mình
Phần 1: http://laptrinhtanbinh.com/course/1/Lap-trinh-voi-ngon-ngu-C/16/2.2.-Cac-lop-(-phan-1-2-)
Phần 2: http://laptrinhtanbinh.com/course/1/Lap-trinh-voi-ngon-ngu-C/17/2.3.-Cac-lop-(-phan-2-2-)

Trong giáo trình này hướng dẫn làm 1 game RPG dạng dòng lệnh để làm Ví dụ về Đối tượng và lớp trong C++

Mình đã làm theo tuy nhiên khi chạy thì bị lỗi và mình chỉ sửa đc 1 lỗi trong số đó do mình code nhầm và không biết fix các lỗi còn lại như thế nào cả !

Mình cũng đã thử cho hết code của tác giả vào 1 file main.cc và chạy cũng lỗi nốt

Mã lỗi khi chạy chương trình(Cho hết vào 1 file main.ccp để chạy):

[code]Running /home/ubuntu/workspace/class/full_source.cc
/home/ubuntu/workspace/class/full_source.cc:20:9: error: ‘VuKhi’ does not name a type
VuKhi m_vuKhi; //Nhan vat so huu 1 vu khi
^
/home/ubuntu/workspace/class/full_source.cc: In constructor ‘NhanVat::NhanVat(std::string, int)’:
/home/ubuntu/workspace/class/full_source.cc:62:70: error: class ‘NhanVat’ does not have any field named ‘m_vuKhi’
NhanVat::NhanVat(string vuKhi, int dmgVuKhi) : m_hp(100), m_mp(100), m_vuKhi(vuKhi, dmgVuKhi){
^
/home/ubuntu/workspace/class/full_source.cc: In member function ‘void NhanVat::tanCong(NhanVat&)’:
/home/ubuntu/workspace/class/full_source.cc:79:27: error: ‘m_vuKhi’ was not declared in this scope
mucTieu.nhanSatThuong(m_vuKhi.getDmg());
^
/home/ubuntu/workspace/class/full_source.cc: In member function ‘void NhanVat::doiVuKhi(std::string, int)’:
/home/ubuntu/workspace/class/full_source.cc:92:5: error: ‘m_vuKhi’ was not declared in this scope
m_vuKhi.thayDoi(vuKhiMoi, dmgVuKhiMoi);
^
/home/ubuntu/workspace/class/full_source.cc: In member function ‘void NhanVat::inTrangThai() const’:
/home/ubuntu/workspace/class/full_source.cc:102:5: error: ‘m_vuKhi’ was not declared in this scope
m_vuKhi.inThongTin();
^

Process exited with code: 1
[/code]

Mã nguồn chương trình gốc của Lập trình Tân binh:
Tải về mã nguồn : http://laptrinhtanbinh.com/public/user/1/1_17_RPG_CodeSource.zip
File main.ccp

[code]#include
#include “NhanVat.h” //Dung quen them NhanVat.h
using namespace std;

int main(){
NhanVat david, goliath(“Kiem sat”,20);
//Tao ra 2 nhan vat chang ti hon david va nguoi khong lo goliath

goliath.tanCong(david); //goliath tan cong david
david.uongThuocHP(20); //david uong thuoc de hoi phuc 20 diem hp
goliath. tanCong(david); //goliath lai tan cong david
david.tanCong(goliath); //david tan cong goliath
goliath.doiVuKhi("Riu cua tu than", 40);
goliath.tanCong(david);

//Quan sat trang thai cua tung nhan vat
cout << "David" << endl;
david.inTrangThai();
cout << endl << "Goliath" << endl;
goliath.inTrangThai();
return 0;

}
[/code]

File NhanVat.h

[code]#ifndef DEF_NHANVAT
#define DEF_NHANVAT
#include
#include
#include “VuKhi.h” //Dung quen them dong nay de su dung lop VuKhi

class NhanVat{
public:
NhanVat();
NhanVat(std::string vuKhi, int dmgVuKhi);
~NhanVat();
void nhanSatThuong(int soDmg);
void tanCong(NhanVat &mucTieu);
void uongThuocHP(int dungLuongThuoc);
void doiVuKhi(std::string vuKhiMoi, int dmgVuKhiMoi);
bool conSong() const;
void inTrangThai() const;

private:
    int m_hp;
    int m_mp;
    VuKhi m_vuKhi; //Nhan vat so huu 1 vu khi

};

#endif
[/code]

File VuKhi.h

[code]#ifndef DEF_VUKHI
#define DEF_VUKHI
#include
#include

class VuKhi{
public:
VuKhi();
VuKhi(std::string ten, int dmg);
void thayDoi(std::string ten, int dmg);
void inThongTin() const;
int getDmg() const ;

private:
    std::string m_ten;
    int m_dmg;  //dmg la damage nghia la muc sat thuong

};

#endif
[/code]

File NhanVat.ccp

[code]#include “NhanVat.h”
#include “VuKhi.h”
using namespace std;

NhanVat::NhanVat() : m_hp(100), m_mp(100){
}

NhanVat::NhanVat(string vuKhi, int dmgVuKhi) : m_hp(100), m_mp(100), m_vuKhi(vuKhi, dmgVuKhi){
}

NhanVat::~NhanVat(){
/* Khong can lam gi ca vi khong co phan bo dong. Thong thuong thi doan ma xu ly nay se chua cac phep delete va thuc hien 1 vai xac nhan truoc khi huy doi tuong */
}

void NhanVat::nhanSatThuong (int soDmg){
m_hp -= soDmg;
//Tru di so diem hp bang dung so sat thuong phai nhan

if (m_hp < 0){ //Tranh cho so diem hp xuong duoi 0
m_hp = 0; //Gan cho 0 diem hp (nhan vat da chet)
}
}

void NhanVat::tanCong(NhanVat &mucTieu){
mucTieu.nhanSatThuong(m_vuKhi.getDmg());
//Gay cho muc tieu muc sat thuong bang muc sat thuong cua vu khi nhan vat dang dung
}

void NhanVat::uongThuocHP(int dungLuongThuoc){
m_hp += dungLuongThuoc;

if (m_hp > 100){ //So luong hp khong the vuot qua 100
m_hp = 100;
}
}

void NhanVat::doiVuKhi(string vuKhiMoi, int dmgVuKhiMoi){
m_vuKhi.thayDoi(vuKhiMoi, dmgVuKhiMoi);
}

bool NhanVat::conSong()const{
return m_hp > 0; //Tra ve true neu m_hp > 0 va false neu khong dung
}

void NhanVat::inTrangThai() const {
cout << "HP : " << m_hp << endl;
cout << "MP : " << m_mp << endl;
m_vuKhi.inThongTin();
}
[/code]

File VuKhi.cpp

[code]#include “VuKhi.h”
using namespace std;

VuKhi::VuKhi() : m_ten(“Kiem go”), m_dmg(10){
}

VuKhi::VuKhi(string ten, int dmg) : m_ten(ten), m_dmg(dmg){
}

void VuKhi::thayDoi(string ten, int dmg){
m_ten = ten;
m_dmg = dmg;
}

void VuKhi::inThongTin() const{
cout << "Vu khi : " << m_ten << " (Muc sat thuong : " << m_dmg << “)” << endl;
}

int VuKhi::getDmg() const{
return m_dmg;
}
[/code]

Hi vọng mọi người giúp sửa mã để cho nó chạy giúp mình !
Mình đã thử hỏi tác giả nhưng vẫn chưa thấy trả lời

Ngô Doãn Tuấn viết 22:25 ngày 30/09/2018

Mình đã test rồi sao nó vẫn chạy nhỉ ?


Mình cũng không rõ đề bài lắm . . .
Vẫn đang test tiếp tục không biết có bị sai lỗi logic không

Pham Van Hai viết 22:21 ngày 30/09/2018

Đã dùng g++ build thử không thấy lỗi syntax nào và chương trình chạy bình thường.

The Wind viết 22:23 ngày 30/09/2018

Mình đã thử hỏi lại tác giả và đã chạy thành công…
Cảm ơn mọi người đã giúp đỡ !
Tại mình chạy trên Cloud9.io nên hơi ngược so với các IDE khác
Update;
Mình đã thử trên các IDE khác như Codenvy bằng cách cho hết vào 1 file main.cpp
Link : http://pastebin.com/UNGUyKnE
Và IDE nào cũng bị lỗi tương tự vậy hết !
Có lẽ lỗi này là do Ubuntu hoặc G++
Phải đổi class Vukhi lên trước class NhanVat thì mới chạy đc
Ai có thể giải thích là tại sao k nhỉ !

Bài liên quan
0