Bạn rõ ràng đang sử dụng phiên bản Delphi mới hơn Delphi 6. Mặc dù được cập nhật vào năm 2005, mã từ cuốn sách đó chỉ phát hiện lên phiên bản Delphi đó. TDDefine.inc xác định một số biểu tượng trình biên dịch dựa trên phiên bản nó phát hiện, nhưng khi phiên bản bạn đang sử dụng không phải là bất kỳ thứ gì nó nhận ra, nó xác định các ký hiệu không có. Điều đó cuối cùng dẫn đến các vấn đề sau này khi trình biên dịch gặp mã như thế này trong TDBasics.pas;
implementation
uses
{$IFDEF Delphi1}
WinTypes, WinProcs;
{$ENDIF}
{$IFDEF Delphi2Plus}
Windows;
{$ENDIF}
{$IFDEF Kylix1Plus}
Types, Libc;
{$ENDIF}
{$IFDEF Delphi1}
{$R TDStrRes.r16}
{$ENDIF}
{$IFDEF Delphi2Plus}
{$R TDStrRes.r32}
{$ENDIF}
{$IFDEF Kylix1Plus}
{$R TDStrRes.r32}
{$ENDIF}
const
UnitName = 'TDBasics';
Kể từ khi không ai trong số Delphi1
, Delphi2Plus
, hoặc Kylix1Plus
được xác định, mệnh đề uses
trống. Khi chúng tôi bỏ qua tất cả các chỉ thị biên dịch và khối mã không hoạt động, trình biên dịch cuối cùng nhìn thấy mã như thế này:
implementation
uses
const
UnitName = 'TDBasics';
Đó là lý do tại sao các trình biên dịch phàn nàn về mong đợi một định danh thay vì const
.
Để khắc phục sự cố, bạn cần phải dạy TDDefine.inc để nhận dạng phiên bản Delphi của bạn. Mặc dù vậy, dễ dàng hơn, có thể là bỏ qua tất cả mã phát hiện phiên bản và mã hóa cứng tất cả các ký hiệu áp dụng cho phiên bản bạn đang sử dụng. Miễn là bạn không bao giờ sử dụng bất kỳ phiên bản nào cũ hơn Delphi 6, tất cả, các ký hiệu sẽ áp dụng cho tất cả các phiên bản của bạn.
Tìm khối mã sau đây trong TDDefine.pas:
{$IFDEF VER140}
{$DEFINE Delphi6}
{$DEFINE Delphi1Plus}
{$DEFINE Delphi2Plus}
{$DEFINE Delphi3Plus}
{$DEFINE Delphi4Plus}
{$DEFINE Delphi5Plus}
{$DEFINE Delphi6Plus}
{$DEFINE HasAssert}
{$ENDIF}
Tháo dòng đầu tiên và cuối cùng để các $DEFINE
hướng dẫn còn lại được xử lý vô điều kiện.
Nguồn
2013-06-05 22:17:09
Tôi nghĩ câu hỏi này rất hay. Các poster "không thể biên dịch chương trình và không hiểu tại sao". Bạn cần thêm gì nữa à? Mọi thông tin bổ sung có thể thiên vị các phản ứng có thể xảy ra. Dù sao, 10 chống lại 1 nó là một con đường tìm kiếm/đơn vị không tìm thấy vấn đề. Ví dụ, để biên dịch TDRecList.pas, các tệp TDBasics.pas và TDDefine.inc phải có mặt trong đường dẫn tìm kiếm. – Igor
Igor, cảm ơn bạn! Tôi cũng không hiểu ... Có đơn vị (xem liên kết tại bài của tôi). Tôi thêm đơn vị vào chương trình. Có rõ không? Tôi không thể biên dịch mã. Lỗi: http://i.stack.imgur.com/VIM6x.png http://i.stack.imgur.com/7i3To.png – tbutton
@Igor, bạn chính xác rằng nhiều thông tin hơn sẽ thiên vị các phản hồi; nó sẽ thiên vị họ hướng tới * hữu ích * thay vì chỉ bắn trong bóng tối. Phần thông tin thiếu cơ bản nhất trong câu hỏi này là * thông báo lỗi *. –