Giao diện
Phụ lục A
Đọc thông báo lỗi của g++
Lỗi đầu tiên là lỗi thật. Một dấu ; thiếu có thể sinh ra 40 dòng thông báo, nhưng 39 dòng sau chỉ là hệ quả. Luôn sửa lỗi trên cùng rồi biên dịch lại — rất thường là 39 dòng kia biến mất theo.
A.1 Cấu trúc một dòng lỗi
cpp
Document.h:8:2: error: expected ';' after class definition
8 | }
| ^
| ;Document.htên file — mở đúng file này, đừng mở file khác8số dòng. Lỗi thật có thể ở dòng ngay trước đó, vì trình biên dịch chỉ phát hiện ra khi đọc tới đây2số cột, và mũi tên^chỉ đúng vị tríerrorchặn biên dịch;warningthì không, nhưng thường báo trước một lỗi lúc chạy;notelà lời giải thích thêm cho dòng trên nó
A.2 Bảng tra nhanh
| Thông báo | Nghĩa | Sửa thế nào |
|---|---|---|
expected ';' after class definition | Thiếu dấu chấm phẩy sau dấu } đóng lớp | Thêm ; |
'X' was not declared in this scope | Chưa từng thấy tên này | Quên #include "X.h", hoặc gõ sai tên |
undefined reference to `A::f()' | Có khai báo, không tìm thấy thân hàm | Thiếu file .cpp trong lệnh g++, hoặc quên tiền tố A:: |
undefined reference to `WinMain' | Không có hàm main nào | Thiếu main.cpp trong lệnh biên dịch |
redefinition of 'class X' | Một lớp bị đọc hai lần | Thiếu header guard |
invalid new-expression of abstract class | Đang tạo đối tượng của lớp trừu tượng | Đọc các dòng note: phía dưới — nó liệt kê đúng các hàm còn thiếu |
no matching function for call to 'A::A()' | Cần constructor mặc định mà lớp không có | Viết thêm constructor mặc định, hoặc gọi constructor cha ở danh sách khởi tạo |
marked 'override', but does not override | Chữ ký lớp con khác lớp cha | So lại từng tham số và chữ const ở cuối |
passing 'const A' as 'this' argument discards qualifiers | Gọi hàm không const trên đối tượng const | Thêm const cho hàm chỉ đọc |
cannot declare variable to be of abstract type | Khai báo biến kiểu lớp trừu tượng | Dùng con trỏ A* thay vì A |
expected unqualified-id before ... | Rất thường là lỗi ở dòng phía trên | Xem lại dòng ngay trước đó |
ld returned 1 exit status | Kết luận của lỗi liên kết | Đọc dòng phía trên nó, đó mới là lỗi thật |
12 câu lấy từ đúng bảng phía trên. Mỗi câu, tự gõ câu trả lời trước rồi mới xem đáp án. Bí thật thì xin 4 lựa chọn, nhưng câu đó chỉ tính là “đúng nhờ lựa chọn”.
A.3 Ba câu hỏi khi bí
- Lỗi này là loại nào? Cú pháp (có số dòng trong file của bạn) / liên kết (có
undefined reference) / lúc chạy (không có thông báo nào từ g++). - Lần cuối chương trình còn chạy được là lúc nào? Bỏ những gì vừa thêm, chạy lại, rồi thêm lại từng mẩu nhỏ. Cách này chậm nhưng luôn ra kết quả.
- Chương trình chết ở đâu? Chèn
cout << "1" << endl;,cout << "2" << endl;vào vài chỗ. Số cuối cùng in được cho biết nó chết ở khoảng nào.