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
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
Đã dùng
g++
build thử không thấy lỗisyntax
nào và chương trình chạy bình thường.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ỉ !