Tôi đang viết một ứng dụng Delphi 2010. Nó có nhiều tập tin, hai trong số đó được gọi là Utils_ABS và Utils_MAT. Tôi đã tạo ra một loại bản ghi mà cả hai tập tin cần phải hiểu, vì vậy tôi đặt nó trong tập tin riêng của nó, được gọi là TypeDefs.inc.Tại sao tôi nhận được lỗi "loại không tương thích" ngay cả khi tôi đã thực hiện định nghĩa bản ghi có sẵn cho tất cả các đơn vị?
Ở đầu cả Utils_MAT và Utils_ABS, tôi có BAO GỒM TypeDefs.inc.
unit Utils_ABS;
interface
{$WARNINGS ON}
{$HINTS ON}
{$WARN UNIT_PLATFORM OFF}
{$WARN SYMBOL_PLATFORM OFF}
uses
Windows, Messages, ... Utils, Analysis, UserFeedback, Utils_MAT;
{$I TypeDefs.inc} // Include TypeDefs that are used multiple places
procedure ABS_Load;
...
Utils_MAT trông rất giống nhau, đặc biệt là liên quan đến {$I TypeDefs.inc}
.
Các mục quan trọng là cả hai tập tin tham chiếu đến một tập tin thứ ba, TypeDefs.inc, như là một BAO GỒM NHỮNG SỰ, trong đó có định nghĩa của một RECORD:
type
TTableAttrType = Record
tabIOT: Boolean; // Is table an IOT
...
end;
Không có gì khác chỉ là định nghĩa một kỷ lục này trong này tập tin.
Vấn đề là khi tôi biên dịch, tôi nhận được lỗi sau:
[DCC Error] Utils_ABS.pas(212): E2010 Incompatible types: 'Utils_ABS.TTableAttrType' and 'Utils_MAT.TTableAttrType'
Tôi hoàn toàn bối rối. Làm thế nào họ có thể là loại không tương thích nếu chúng đến từ cùng một định nghĩa? Không phải là bản sao của định nghĩa, nhưng theo nghĩa đen là cùng một định nghĩa.
Tôi đã kiểm tra tất cả mã nguồn của mình và bản ghi TTableAttrType này không được xác định ở bất kỳ nơi nào khác.
Tôi đã cố gắng nhận xét $ INCLUDE và mã hóa cứng định nghĩa của bản ghi thành cả Utils_ABS và Utils_MAT, nhưng tôi vẫn gặp lỗi tương tự.
Làm cách nào để nhận được lỗi này? Làm cách nào để xác định cấu trúc bản ghi ở một nơi và có nhiều tệp truy cập vào cấu trúc đó?
Đó là nó. Nhiều THANKS! – user1009073