Ý nghĩa các lỗi thường gặp trong lập trình C\C++


Các bạn thân mếm việc phát sinh ra các lỗi khi lập trình là điều không thể tránh khỏi, khi gặp lỗi đương nhiên chúng ta phải tịm cách sửa lỗi. Việc sửa lỗi cũng giống như gỡ chỉ rối, chúng ta phải lần từ đầu (sửa lỗi theo phương pháp tuần tự). Để sửa lỗi nhanh chóng, việc quan trọng nhất là các bạn phải khoanh vùng được lỗi và hiểu rõ nội dung thông báo lỗi. Trong các ngôn ngữ lập trình, C\C++ được sử dụng khá phổ biến và những lỗi phát sinh cũng rất khó sửa so với các ngôn ngữ khác.

Khác với lỗi cảnh báo (warning) có thể bỏ qua mà không cần sửa, tuy nhiên một số warning nếu không được sửa sẽ làm cho chương trình (CT) chạy không đúng hoặc không hiệu quả. Kích đôi chuột vào thông báo lỗi để nhảy đến vị trí có lỗi trong chương trình (CT).

Dưới đây là một số lưu ý và ý nghĩa của các thông báo lỗi thường gặp:
- Đọc dòng chứa con trỏ hoặc dòng trên (dưới) để sửa lỗi.
- Nếu không tìm thấy lỗi thì phải dò lỗi từ đầu CT đến dòng chứa con trỏ (có thể là do lỗi ở phần trên của dòng chứa con trỏ chứ không phải ở dòng chứa con trỏ (hoặc dòng trên nó)).
- Các lỗi ngữ nghĩa (CT vẫn thực thi nhưng kết quả sai) trình biên dịch C++ không phát hiện được:

Một số từ English thông dụng trong lập trình:
Undeclared : không khai báo 
unable: không thể 
undefined : không xác định 
Incorrectly: ko chính xác 
Symbol : biểu tượng 
Statement: câu lệnh, khai báo 
Parameter: tham số 
Argument: đối số 
Declaration: kê khai (khai báo) 
Terminated: chấm dứt 
Syntax : cú pháp 
Constant: hằng số 
Expression: biểu thức

Mốt số lỗi thường gặp và ý nghĩa:

1. ( expected: thiếu ‘(‘  
2. ) expected: thiếu ‘)’ 
3. , expected: thiếu ‘,’ 
4. : expected after private: thiếu ‘:’ sau private 
5. : expected after protected: thiếu ‘:’ sau protected 
6. : expected after public: thiếu ‘:’ sau public 
7. < expected: thiếu dấu < 
8. { expected:thiếu dấu { 
9. } expected: thiếu dấu } 
10. Array bounds missing ]: thiếu ‘]’ bao dãy 
11. Array must have at least one element: dãy phải có ít nhất một phần tử 
12. Array size too large: kích cỡ dãy quá lớn 
13. Body already defined for this function: nội dung hàm này đã được viết. 
14. Call of nonfunction: tên được gọi không được khai báo như một hàm, do khai báo hàm không chính xác hoặc viết sai tên hàm. 
15. Cannot cast from 'type1' to 'type2': không thể ép từ kiểu ‘type1’ đến kiểu 'type2' 
16. Cannot convert 'type1' to 'type2': không thể chuyển đổi 'type1' thành 'type2' 
17. Cannot modify a const object: không thể thay đổi một đối tượng hằng (const) 
18. Cannot overload 'main': không thể định nghĩa chồng hàm main 
19. Cannot use tiny or huge memory model with Windows: không thể sử dụng mô hình bộ nhớ tiny hoặc huge với Windows 
20. Cannot open such file or directory “xxx”: không thể mở file hoặc thư mục xxx 
21. Cannot open “Debug\..” for writting: không thể mở file Debug\.. để ghi (hãyđóng CT đã chạy trước đây để có thể chạy lại CT) 
22. Case outside of switch: ‘case’ bên ngoài switch 
23. Case statement missing ‘:’: ‘case’ thiếu dấu ‘:’ 
24. Character constant must be one or two characters long: hằng ký tự chỉ có thể là một ký tự (‘a’) hoặc hai ký tự (‘\n’) 
25. Compound statement missing }: thiếu dấu } cho khối lệnh (câu lệnh phức). 
26. Constant expression required: dãy phải được khai báo với kích thước là hằng số(thường là do khai báo hằng (#define) không đúng). 
27. Constant variable 'variable' must be initialized: biến có kiểu const phải được khởi tạo (vì ta không thể gán giá trị cho biến có kiểu const trong quá trình thi hành CT). Thực hành nhập môn lập trình 10 
28. Could not find a match for argument(s): các đối số không phù hợp (kiểm tra lại khai báo hàm và các đối số truyền vào) 
29. Could not find file 'filename': không thể tìm file 'filename' 
30. Declaration does not specify a tag or an identifier: khai báo (kiểu struct hoặc kiểu union) không chứa thành phần 
31. Declaration is not allowed here: không cho phép khai báo ở đây 
32. Declaration missing ‘;’: khai báo thiếu dấu ‘;’ 
33. Declaration syntax error: khai báo sai lỗi cú pháp 
34. Declaration terminated incorrectly: kết thúc khai báo không chính xác 
35. Declaration was expected: khai báo được mong muốn ở đây nhưng không tìm thấy 
36. Default argument value redeclared: giá trị của tham số mặc định bên trong hàm bị thay đổi 
37. Default argument value redeclared for parameter 'parameter': giá trị của tham số (đối số) mặc định 'parameter' bên trong hàm bị thay đổi 
38. Default expression may not use local variables: một biểu thức tham số (đối số)mặc định bên trong hàm không được phép sử dụng tham số khác 
39. Default outside of switch: default bên ngoài switch 
40. Default value missing: tham số theo sau một tham số mặc định phải có giá trị mặc định 
41. Default value missing following parameter 'parameter': thiếu giá trị mặc định cho tham số 'parameter' (vì nó theo sau một tham số mặc định nên phải có giá trị mặc định) 
42. Define directive needs an identifier: khai báo define cần có một tên 
43. Delete array size missing ]: thiếu ‘]’ khi hủy một dãy 
44. Division by zero: chia cho 0= 
45. do statement must have while: do phải có while  
46. do-while statement missing (: do-while thiếu dấu ‘(’ 
47. do-while statement missing ): do-while thiếu dấu ‘)’ 
48. do-while statement missing ;: do-while thiếu dấu ‘;’ 
49. Duplicate case: mỗi case trong switch phải có giá trị đi kèm 
50. Enum syntax error: khai báo kiểu enum sai cú pháp 
51. Expression expected: một biểu thức được mong muốn ở đây nhưng ký hiệu hiện thời không thể bắt đầu cho một biểu thức 
52. Expression of scalar type expected: mong muốn biểu thức có kiểu vô hướng. Các toán tử !, ++, và – yêu cầu một biểu thức có kiểu vô hướng (char, short, int,long, enum, float, double, long double, pointer) 
53. Expression syntax: cú pháp biểu thức 
54. File name too long: tên file qúa dài 
55. For statement missing ‘(‘: câu lệnh for thiếu ‘(’ 
56. For statement missing ): câu lệnh for thiếu ‘)’ 
57. For statement missing ;: câu lệnh for thiếu ‘)’ 
58. 'function' cannot return a value: hàm không thể trả về giá trị (nó là hàm void) 
59. 'function' must be declared with no parameters: hàm phải được khai báo với không tham số  
60. 'function' must be declared with one parameter: hàm phải được khai báo với một tham số Thực hành nhập môn lập trình11 
61. 'function' must be declared with two paraameters: hàm phải được khai báo với một tham số 
62. 'function1' cannot be distinguished from 'function2': không thể phân biệt 'function1' với 'function2' 
63. Function 'function' should have a prototype: hàm 'function' nên có tiêu đề. 
64. Function call missing ): thiếu dấu ‘)’ khi gọi hàm. 
65. Function should return a value: chưa trả về giá trị cho hàm 
66. 'identifier' cannot start a parameter declaration: 'identifier' không thể bắt đầu cho khai báo một tham số 
67. 'identifier' is not a member of struct: 'identifier' không phải là thành phần của struct 
68. 'identifier' is not a non-static member and can't be initialized here: 'identifier' không phải là một biến tĩnh và không thể được khởi tạo ở đây 
69. 'identifier' is not a parameter: 'identifier' không phải là một tham số 
70. Identifier expected: mong muốn một định danh 
71. If statement missing (: câu lệnh if thiếu ‘(‘ 
72. If statement missing ): câu lệnh if thiếu ‘)‘ 
73. Illegal character 'character' (0x'value'): hằng ký tự sai 
74. Illegal structure operation: toán tử trên struct không đúng (chỉ có thể là: ‘.’, &,=) 
75. Illegal use of floating point: toán tử trên số thực chấm động không đúng (chỉ có thể là: SHL, SHR, AND, OR, XOR, NOT, ? :, *, …) 
76. Improper use of typedef 'identifier': kiểm tra khai báo 'identifier' ở dòng typedef 
77. Incorrect number format: định dạng số không đúng 
78. Incorrect use of default: sau default không có dấu ‘:’ 
79. Invalid use of dot: sử dụng dấu ‘.’ không đúng, 
ví dụ:
struct foo {
int x;int y;
}p = {0,0}; 
int main (…){
p.x++; /* Đúng */p. y++; /* Sai: Invalid use of dot */return 0;
}
80. Lvalue required: thành phần bên trái của lệnh gán phải là biến 
81. main must have a return type of int: hàm main phải return về kiểu int 
82. Misplaced break: break không nằm trong switch hoặc một vòng lặp 
83. Misplaced continue: continue không nằm trong một vòng lặp 
84. Misplaced else: else không có if 
85. Missing xxx before yyy: thiếu xxx trước yyy 
86. Missing function header (old-style): sai tiêu đề ở phần định nghĩa hàm (có thểmthừa dấu ; sau tiêu đề) 
87. Multiple declaration for 'identifier': trùng khai báo cho 'identifier' 
88. Need an identifer to declare: cần một định danh cho khai báo 
89. No : following the ?: không có : sau ? trong cấu trúc tam phân (… ? … : … ) 
90. Not an allowed type: không cho phép kiểu này (chẳng hạn, không thể trả về dữ liệu kiểu mảng tĩnh cho hàm) 
91. Numeric constant too large: hằng số quá lớn 
92. new line in constant: thiếu dấu ” 
93. operator [] missing ]: toán tử [] thiếu ] 
94. sizeof may not be applied to a function: toán tử sizeof không thể áp dụng cho hàm 
95. Size of 'identifier' is unknown or zero: kích thước của 'identifier' không biết hoặc  là 0 
96. Size of the type is unknown or zero: kích thước của kiểu không biết hoặc là 0 
97. Statement missing ‘;’: thiếu dấu ‘;’ 
98. Structure size too large: kích thước của struct quá lớn 
99. Switch selection expression must be of integral type: biểu thức chọn của switch phải là kiểu nguyên 
100. unexpected end of file: thiếu } 
101. xxx undeclared identifier: thiếu khai báo xxx