Như tên cho thấy, một ký hiệu bạn đã khai báo không phải do bạn xác định. Điều này có thể xảy ra do nhiều trường hợp. Hãy xem ba trong số chúng -
-
Bạn quên xác định tên đã khai báo. Ví dụ, bạn đã khai báo một hàm trong một tệp và sử dụng nó ở đâu đó. Nhưng bạn đã không cung cấp định nghĩa của nó. Mã -
#include<iostream> void foo(); int main() { foo(); // Declared but not defined }
-
Bạn đã xác định nó nhưng không sử dụng tên đủ điều kiện. Giả sử bạn đã tạo một lớp với một phương thức và định nghĩa phương thức đó nhưng lại quên sử dụng độ phân giải phạm vi để liên kết hàm đó với định nghĩa đó và sử dụng hàm đó ở đâu đó. Ví dụ,
#include<iostream> class A { void foo(); }; void foo() { } // should have used A::foo int main() { A a; a.foo(); // Not defined! }
-
Bạn đã không bao gồm các phần phụ thuộc theo thứ tự không chính xác. Trình liên kết cố gắng liên kết theo thứ tự bạn chỉ định cho nó. Vì vậy, trong trường hợp bạn sử dụng một phương thức trước định nghĩa của nó, nó có thể sẽ gây ra lỗi này.
Không thể tạo danh sách đầy đủ các điều kiện có thể gây ra lỗi này. Nhưng bạn có thể tham khảo bài đăng này để biết danh sách các lý do có thể được sắp xếp rất kỹ lưỡng - https://stackoverflow.com/questions/12573816/what-is-an-undefined-reference-unresolved-external-symbol-error-and- how-do-i-fix