Skip to content

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.h tên file — mở đúng file này, đừng mở file khác
  • 8 số 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 đây
  • 2 số cột, và mũi tên ^ chỉ đúng vị trí
  • error chặn biên dịch; warning thì không, nhưng thường báo trước một lỗi lúc chạy; note là lời giải thích thêm cho dòng trên nó

A.2 Bảng tra nhanh

Thông báoNghĩaSửa thế nào
expected ';' after class definitionThiếu dấu chấm phẩy sau dấu } đóng lớpThêm ;
'X' was not declared in this scopeChưa từng thấy tên nàyQuê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àmThiế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àoThiếu main.cpp trong lệnh biên dịch
redefinition of 'class X'Một lớp bị đọc hai lầnThiế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 overrideChữ ký lớp con khác lớp chaSo lại từng tham số và chữ const ở cuối
passing 'const A' as 'this' argument discards qualifiersGọi hàm không const trên đối tượng constThêm const cho hàm chỉ đọc
cannot declare variable to be of abstract typeKhai báo biến kiểu lớp trừu tượngDùng con trỏ A* thay vì A
expected unqualified-id before ...Rất thường là lỗi ở dòng phía trênXem lại dòng ngay trước đó
ld returned 1 exit statusKế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
Tự luyện: g++ báo thế này nghĩa là gì?

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í

  1. 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++).
  2. 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ả.
  3. 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.

Đọc xong và tự làm hết phần “Tự kiểm tra” rồi hãy đánh dấu.

© 2026 Ngan V.T. Nguyen · Nội dung theo giấy phép CC BY-NC-SA 4.0 · Code ví dụ theo giấy phép MIT · Ảnh của bên thứ ba giữ giấy phép riêng, ghi ở Phụ lục E

Nội dung theo giấy phép CC BY-NC-SA 4.0 · Code ví dụ theo giấy phép MIT · Ảnh của bên thứ ba giữ giấy phép riêng, ghi ở Phụ lục E