Tôi đang cố gắng xác định một const trong Delphi (Delphi 2005 có nghĩa là) dựa trên các hằng số khác, nhưng Delphi phàn nàn về nó không phải là một biểu thức liên tục. Đây là mã của tôi trông giống như:Lỗi xác định hằng số trong Delphi
program myProgram;
const
Xpoints = 20;
Ypoints = 30;
ArraySize = trunc(sqrt(Xpoints*Ypoints));
var
myArray : array[1..ArraySize] of integer;
Tôi có thể làm ArraySize = Xpoints * Ypoints nhưng sqrt gây ra sự cố. Ý tưởng là tôi muốn mảng có kích thước bằng các hằng số Xpoints và Ypoints. Tôi có thể làm một cái gì đó như thế này:
program myProgram;
const
sqrtXpoints = 4.472135956;
sqrtYpoints = 5.47722557506;
Xpoints = trunc(sqrtXpoints*sqrtXpoints);
Ypoints = trunc(sqrtYpoints*sqrtYpoints);
ArraySize = trunc(sqrtXpoints*sqrtYpoints);
var
myArray : array[1..ArraySize] of integer;
cẩn thận để đánh giá quá cao giá trị gốc của hình vuông. Tất cả mọi thứ sẽ cập nhật một cách chính xác nếu tôi thay đổi sqrtXpoints hoặc sqrtYpoints, nhưng cách tiếp cận này chỉ có vẻ như vậy ... ngu ngốc.
Là một sửa chữa tạm thời tôi có thể đánh giá hằng số bản thân mình như thế này:
program myProgram;
const
Xpoints = 20;
Ypoints = 30;
ArraySize = 24;
var
myArray : array[1..ArraySize] of integer;
nhưng tôi không thích điều này vì arraySize không tự động cập nhật nếu tôi thay đổi Xpoints hoặc Ypoints.
Nó có vẻ như trình biên dịch nên biết làm thế nào để đánh giá một hằng số được định nghĩa là một hàm toán học của hằng số khác tại thời gian biên dịch cho những thứ như ví dụ trên và cho những thứ thậm chí đơn giản như thế này:
const
pi = 4.0*arctan(1.0);
nhưng tôi không thể chấp nhận nó. Bất kỳ đề xuất? Cảm ơn trước sự giúp đỡ của bạn!
Bạn chỉ đơn giản là không thể sử dụng hàm trong khai báo không đổi. –
Trình biên dịch sẽ không đánh giá 'sqrt'. Bạn có thể, tôi giả sử, sử dụng hằng số đã nhập và sửa nó lúc khởi tạo. Bạn sẽ cần một vài cuộc gọi VirtualAlloc để thực hiện điều đó. –
Một tùy chọn giải pháp khác là sử dụng trình biên dịch ít cầu kỳ hơn trên các biểu thức liên tục (fpc). – OnTheFly