微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

编译器因 qsort 失败

如何解决编译器因 qsort 失败

我将创建绑定 RPG 程序 (CRTBNDRPG) 与示例程序一起使用

工作日志

Ownership of object QSORTR in QTEMP type *MODULE changed.       
DeFinition not found for symbol 'QSORT'.                        
Program QSORTR in library QTEMP not created.                    
Compilation Failed. Program QSORTR not created in library QTEMP.

代码

     H DFTACTGRP(*NO) BNDDIR('QC2LE')

     D qsort           PR                  ExtProc('qsort')
     D   base                          *   value
     D   num                         10U 0 value
     D   width                       10U 0 value
     D   compare                       *   procptr value

      ** Sort the array by DtlItem
     c                   callp     qsort(%addr(Order1): numitems:
     c                                %size(Order): %paddr('SORTBYITEM'))
     c                   For       idx= 1 to numitems
     c                   eval      tmpstr = order1(idx).DtlItem
     c                   Dsply                   tmpstr
     c                   Endfor
...

我从这里复制2003-12-09 如何於 RPG中 針對所定義的資料結構(DataStructure)排序?

解决方法

它应该可以工作。 jon paris article on qsort

这是代码中的文章:

sudo npm install 
npm run dev

编译:

** test0260r: sort data struct array using qsort.
h option(*srcstmt:*nodebugio)
h bnddir('QC2LE')

** --------------------------- test0260r ---------------------------
** test0260r: sort data struct array using qsort.
dtest0260r        pr                  extpgm('TEST0260R')

** --------------------------- qsort --------------------------------
d qsort           pr                  extproc('qsort')
d  dataStart                      *   value
d  elemCount                    10u 0 value
d  elemSize                     10u 0 value
d  compareFunc                    *   ProcPtr value

** --------------------------- test0260r ---------------------------
** test0260r: sort data struct array using qsort.
dtest0260r        pi

d pSeqProcedure   s               *   ProcPtr
d                                     Inz(%PAddr(SeqNameCityState))

** -------------------- customerData -----------------------
d customerData    ds                  Dim(1000) Qualified
d  name                         30a
d  address1                     40a
d  address2                     40a
d  city                         30a
d  state                         2a
d  zip                           5s 0

d customerCount   s             10i 0
 /free
      customerCount  = 50 ;

   qsort ( %Addr(customerData)
         : customerCount
         : %Size(customerData)
         : pSeqProcedure );

      *inlr       = '1' ;
      return ;
 /end-free


** ------------------- seqNameCityState -------------------------
p SeqNameCityState...
p                 b
d                 pi            10i 0
d elementA                            LikeDS(customerData)
d elementB                            LikeDS(customerData)

d high            s             10i 0 inz(1)
d low             s             10i 0 inz(-1)
d equal           s             10i 0 inz(0)
 /Free

   If elementA.state > elementB.state;
     Return HIGH;
   ElseIf elementA.state < elementB.state;
     Return LOW;
   ElseIf elementA.city > elementB.city;
     Return HIGH;
   ElseIf elementA.city < elementB.city;
     Return LOW;
   ElseIf elementA.name > elementB.name;
     Return HIGH;
   ElseIf elementA.name < elementB.name;
     Return LOW;
   Else;
     Return EQUAL;
   EndIf;

 /end-free
p                 e

CRTRPGMOD MODULE(TEST0260R) SRCFILE(QRPGLESRC) DBGVIEW(*ALL)   
CRTPGM PGM(TEST0260R) 

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。