private
    FUserID   : String;
public
     function GetReg(): String;implementation
function GetReg(): String;
var
  Reg: TRegistry;
begin
  Reg:= TRegistry.Create;
  FUserID  := Reg.ReadString(FKeyUsrID) ;
end;编译时出错,提示:undeclared identifier:'FUserID'
FUserID我已经声明为私有成员变量了,为什么还提示出错?

解决方案 »

  1.   

    function GetReg(): String; 
    该函数不是成员函数,是全局函数。而你定义的FUserID是类成员函数。
    所以全局函数要先找到类的指针,才能调用FUserID.
    如:typeTForm...........
    private 
        FUserID   : String; 
    public 
         function GetReg(): String; 
    function GetReg(m_frm:TForm): String; 
    var 
      Reg: TRegistry; 
      m_frm1:TForm;
    begin 
      Reg:= TRegistry.Create; 
      m_frm1:=m_frm;
      m_frm1.FUserID  := Reg.ReadString(FKeyUsrID) ; 
    end; 
      

  2.   

    Free888Man :谢谢你的点拨,问题已经解决,我把代码改成这样就行:
    private 
        FUserID   : String; 
    public 
         function GetReg(): String; implementation 
    function GetReg(): String; 
    var 
      Reg: TRegistry; 
    begin 
      Reg:= TRegistry.Create; 
      form_login.FUserID  := Reg.ReadString(FKeyUsrID) ; 
    end;这是按照你的方法解决的,但我还是有疑问,
    第一,function GetReg(): String;该函数不是成员函数吗?我是定义在public下的,虽然别的类也可以访问,但这个函数不也是公共成员函数吗?为什么会是全局函数?第二,如果我把function GetReg(): String;放在private里面,应该是成员函数了吧,为什么也不行?
      

  3.   

    应该是没有指明FUserID是那个类的
    就把他单成了局部变量,但是这个变量没有定义。本人菜鸟说错无怪,(学习Delphi一个星期)
      

  4.   

    这种定义是全局函数:
    function GetReg(): String;  
    var  
      Reg: TRegistry;  
    begin  
      Reg:= TRegistry.Create;  
      form_login.FUserID  := Reg.ReadString(FKeyUsrID) ;  
    end; 这种方法才是定义类方法:
    type
      TForm1 = class(TForm)
      private  public
        function GetReg(): string;  end;implementationfunction TForm1.GetReg(): String;  
    begin
      ...
    end;