如何将 WriteLn 与枚举类型一起使用?
我正在尝试为一周中的几天创建自定义数据类型,但我无法让它编写它。编译器错误是这样说的:
[错误]hours.dpr(28):Write/Writeln 语句中的类型非法
program hours;
{$APPTYPE CONSOLE}
uses
SysUtils;
type
TypeDay = (Sun,Mon,Tue,Wed,Thu,Fri,Sat);
var day: TypeDay;
begin
for day := Sun to Sat do
begin
writeln(day);
end;
end.
它位于 Windows 上的 Delphi 7 中。
I'm trying to make a custom data type for days of the week but I can't get it to write it. The compiler error says this:
[Error] hours.dpr(28): Illegal type in Write/Writeln statement
program hours;
{$APPTYPE CONSOLE}
uses
SysUtils;
type
TypeDay = (Sun,Mon,Tue,Wed,Thu,Fri,Sat);
var day: TypeDay;
begin
for day := Sun to Sat do
begin
writeln(day);
end;
end.
It's in Delphi 7 on Windows.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(5)
您不需要为此编写汇编程序; TypInfo 包括执行此操作所需的所有内容(获取与枚举值关联的字符串)。
此代码:
这是输出:
问候。
You don't need to write Assembler for this; TypInfo include all that you need for do this (get the string associated to an enumerated value).
This code:
And this is the output:
Regards.
Tom,
Writeln
不支持 Enum 作为参数。您必须调用Ord
函数才能获取序数表示。如果你想显示你的TypeDay
的名称,你可以编写这样的代码。Tom,
Writeln
does not support a Enum as parameter. you must call to theOrd
function to get the ordinal representation. if you wanna show the names of yourTypeDay
you can write a code like this.您可以使用 RTTI 来编写枚举名称。
这是我前段时间编写的一个优化函数:
但请注意,此版本不会检查 aIndex 是否在范围内。
You can use RTTI to write the enumerate names.
Here is an optimized function I wrote some time ago:
But be warned that this version doesn't check for that aIndex to be in range.
枚举不是字符串,因此您需要将它们转换。
对于转换,您可以使用 Delphi
TypInfo
单元中的GetEnumName
函数作为 在 delphi.about.com 进行了解释。——杰罗恩
Enumerations are not strings, so you need to convert them.
For conversion, you can use the
GetEnumName
function from the DelphiTypInfo
unit as explained at delphi.about.com.--jeroen
有趣的是,我可以在 FPC (Lazarus) 中使用带有枚举类型的 readLn,但会抛出与上面在 Delphi、Oxygene、PascalABC.Net 中提到的相同的错误(非法类型)...
Interestingly enough, I'm able to use readLn with enum types in FPC (Lazarus), but will throw the same error (illegal type) as mentioned above in Delphi, Oxygene, PascalABC.Net...