本人刚开始学习Delphi,所用Delphi版本为7,在自行以下代码时遇到Incompatible types问题,求高手给予帮助unit EmunDemo;interfaceuses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;type
  //定义集合
  TStringSet = set of char;
  //定义枚举
  TMyEnum = (Monday,Tuesday,Wednesday,Thursday,Friday,Saturday,Sunday);
  TForm1 = class(TForm)    Button1: TButton;
    Button2: TButton;
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;var
  Form1: TForm1;implementation{$R *.dfm}procedure TForm1.Button1Click(Sender: TObject);
var
  m: TMyEnum;
  num: Integer;
begin
  num:=0;
  // 返回枚举类型的长度
  for m:=Low(TMyEnum) to High(TMyEnum) do
     Inc(num);
  ShowMessage(IntToStr(num));
end;procedure TForm1.Button2Click(Sender: TObject);
var
  character : 'a'..'z';  
  stringSet: TStringSet;
  word: string;
  s: char;
begin
  //stringSet:= [];
  //循环从character中读取元素,
  for s:= Low(character) to High(character) do
  begin
    if s in ['d','e','l','p','h','i'] then
    begin
      //添加元素
      Include(stringSet,s);
    end;
  end;  //读取元素
  for s:= Low(stringSet) to High(stringSet) do
    word := word + s;
  ShowMessage(word);
end;end.

解决方案 »

  1.   

    if s in ['d','e','l','p','h','i'] then//这种格式只支持数字。
    if s in [1,2,3]
      

  2.   

    那我要比较'd','e','l','p','h','i' 这些字符要怎么写呢?求赐教
      

  3.   

    if (s = 'd') or (s = 'e')//直接改成这个方式。
      

  4.   

    我是在这里报错的
    for s:= Low(stringSet) to High(stringSet) do
    改成你说的那种方式还是不行
      

  5.   


    //遍历方法用错了 改动如下
    vStringSet:= []; //初始化集合
      //循环从character中读取元素,
      for s:= Low(character) to High(character) do
      begin
        if s in ['d','e','l','p','h','i'] then
        begin
          //添加元素
          Include(vStringSet,s);
        end;
      end;  //读取元素
      word := '';
      for s in vStringSet do
        word := word + s;
      ShowMessage(word);//如果提示数据类型问题  就把char改成ansichar
      

  6.   

    procedure TForm1.btn1Click(Sender: TObject);
    var
      m: TMyEnum;
      num: Integer;
    begin
      num:=0;
    //   返回枚举类型的长度
      for m:=Low(TMyEnum) to High(TMyEnum) do
         Inc(num);
      ShowMessage(IntToStr(num));  //通过下标计算元素个数  与上边的方法结果相同
      num := integer(High(TMyEnum)) - integer(Low(TMyEnum)) + 1;
      ShowMessage(IntToStr(num));
    end;
      

  7.   


    又遇到for loop control variable must be simple local variable 这个错误 是不是Delphi7 不支持for...in...的遍历啊
      

  8.   

    D7不支持 for in语法只能通过最大集去遍历匹配
    你的使用环境, character就是最大集
    for s:= Low(character) to High(character) do
      begin
        if s in vStringSet then
        begin
          word := word + s;
        end;
      end;
      

  9.   

    感谢simonhehe、case5166帮忙 问题顺利解决了