type   //定义结构体
    svm_result=record
     total_sv:integer;
     alpha:array of pdouble;
     index:array of pinteger;
     rho: double;
     sv:array of pdouble;
end;
function re_train(data:array of double; label1:pdouble;num:integer):svm_result;//函数
  i,j,z:integer;
  alpha:pdouble;
  re:svm_result;
begin
  SetLength(re.alpha,num);
  SetLength(re.index ,num);
  SetLength(re.sv ,num);
  for i:=0 to num do
    begin
    re.alpha[i]^:=i;
    re.index[i]^:=1;
    re.sv[i]^:=1.0;
   end;
    re.rho:=3;
end;
求教各位,如何返回结果?

解决方案 »

  1.   

    一楼的方法试了,还是不行.
    提示错误是:[Error] Unit1.pas(74): Declaration of 'training' differs from previous declaration
      

  2.   

    function re_train(data:array of double; label1:pdouble;num:integer):svm_result;//函数 
      i,j,z:integer; 
      alpha:pdouble; 
    begin 
      SetLength(result.alpha,num); 
      SetLength(result.index ,num); 
      SetLength(result.sv ,num); 
      for i:=0 to num do 
        begin 
        result.alpha[i]^:=i; 
        result.index[i]^:=1; 
        result.sv[i]^:=1.0; 
      end; 
        result.rho:=3; 
    end; 为什么要定义成 pdouble pinteger??
      

  3.   

    for i:=0 to num-1 do 
      

  4.   

    function re_train(data:array of double; label1:pdouble;num:integer):svm_result;//函数 
      i,j,z:integer; 
      alpha:pdouble; 
      re:svm_result; 
    begin 
      SetLength(re.alpha,num); 
      SetLength(re.index ,num); 
      SetLength(re.sv ,num); 
      for i:=0 to num do 
        begin 
        re.alpha[i]^:=i; 
        re.index[i]^:=1; 
        re.sv[i]^:=1.0; 
      end; 
        re.rho:=3;
      result:=re; 
    end; 
      

  5.   

    你在调用的时候第一个参数实参是怎么定义的? 正确的做法如下(伪代码):
    type
    TData = array of double;function re_train(data:TData; label1:pdouble;num:integer):svm_result;//函数 
      i,j,z:integer; 
      alpha:pdouble; 
      re:svm_result; 
    begin 
      SetLength(re.alpha,num); 
      SetLength(re.index ,num); 
      SetLength(re.sv ,num); 
      for i:=0 to num do 
        begin 
        re.alpha[i]^:=i; 
        re.index[i]^:=1; 
        re.sv[i]^:=1.0; 
      end; 
        re.rho:=3; 
      result:=re; 
    end; 调用:
    var 
    myData : TData;
    myResult : svm_result;
    begin
       初始化myData;
       myResult := re_train(myData,.....);
    end;//------------------------------------------
    形参和实参定义时如果都是array of double,Delphi会认为这是两种数据类型,所以报错,因此要用TData来统一类型