iCAx开思工具箱

标题: 问一个C++问题,实在没辙了! [打印本页]

作者: yuwan    时间: 2005-7-14 15:23
标题: 问一个C++问题,实在没辙了!
extern int uc1616 (char * cp1, int * ia2, int ip3, double * rr4 );原型
  
int ir6;
char *cp1="point construct";
double  *rr4;
char buffer[UF_UI_MAX_STRING_LEN];
int ia2=0;
  
ir6=uc1616(cp1,[$ia2,0,&rr4)]
  
就这么简单,可是编译出现警告:
'double *' differs in levels of indirection from 'double ** '
different types for formal and actual parameter 4
  
连接没问题,但是在UG运行时就出现问题,得不到rr4数组!
我看例子里也是这样编的,为什么不行呢??

作者: tim8098    时间: 2005-7-14 15:37
yuwan wrote:
extern int uc1616 (char * cp1, int * ia2, int ip3, double * rr4 );原型  
   
  int ir6;  
  char *cp1="point construct";  
  double  *rr4;  
  char buffer[UF_UI_MAX_STRING_LEN];  
  int ia2=0;  
   
  ir6=uc1616(cp1,[$ia2,0,&rr4)]  
   
  就这么简单,可是编译出现警告:  
  'double *' differs in levels of indirection from 'double ** '  
  different types for formal and actual parameter 4  
   
  连接没问题,但是在UG运行时就出现问题,得不到rr4数组!  
  我看例子里也是这样编的,为什么不行呢??  
  

  
改成double试试 因为你定义的函数原形是int 形的。里面的形参却是double形的。
  
刚学C++
作者: VoyagerBu    时间: 2005-7-14 15:53
----------------------------------------------
把 double *rr4; 改成 double rr4;
----------------------------------------------
或者
--------------------------------------------------------------------------------------------
把 ir6=uc1616(cp1,[$ia2,0,&rr4)] 改成 ir6=uc1616(cp1,[$ia2,0,rr4)]  
--------------------------------------------------------------------------------------------
作者: yuwan    时间: 2005-7-14 15:58
to :tim8098  
我用的API的函数库!原型没法改!
to :VoyagerBu  
还是不行!
我不太懂C++啊!
只是想完成一个小任务的!
作者: pzytony    时间: 2005-7-14 15:59
把 double *rr4; 改成 double rr4; (对!)
  
把 ir6=uc1616(cp1,[$ia2,0,&rr4)] 改成 ir6=uc1616(cp1,[$ia2,0,rr4)] (错!)
  
不信你试试
作者: pzytony    时间: 2005-7-14 16:03
即:
  
int ir6;  
char cp1[]  ="point construct";  
double rr4;  
int ia2=0;  
  
ir6=uc1616(cp1,[$ia2,0,&rr4)]
作者: yuwan    时间: 2005-7-14 16:15
楼上!是可以了!
但是返回的是什么呢?rr4是输出,应该一个是一个点的X Y Z 值,
我用sprintf(buffer,"point(x,y,z) is: %f, %f, %f\n", rr4[0],rr4[1],rr4[2]);
他就报错:
subscript requires array or pointer type
作者: pzytony    时间: 2005-7-14 16:32
返回值的含义:
Response Returned
1 = Back
2 = Cancel
5 = Position Returned
7 = No Active Part
8 = Disallowed state, unable to bring up dialog
作者: pzytony    时间: 2005-7-14 16:32
注意:
Point Picked (x,y,z). This is only returned if the return
code is 5.
作者: VoyagerBu    时间: 2005-7-15 10:13
pzytony wrote:
把 double *rr4; 改成 double rr4; (对!)  
  
  把 ir6=uc1616(cp1,[$ia2,0,&rr4)] 改成 ir6=uc1616(cp1,[$ia2,0,rr4)] (错!)  
  
  不信你试试

没有试过。你看看如果改成这样可不可以:
double *rr4=new double;
ir6=uc1616(cp1,[$ia2,0,rr4)]
作者: suiyubing    时间: 2005-7-16 08:19
改成这样试一下,因为我做过一个和你的类似的函数,
double rr4[3];
ir6=uc1616(cp1,[$ia2,0,rr4)]
这样就可以了。
作者: murongjun    时间: 2005-7-17 11:48
extern int uc1616 (char * cp1, int * ia2, int ip3, double * rr4 );原型  
   
int ir6;  
char *cp1="point construct";  
double rr4[3];  
char buffer[UF_UI_MAX_STRING_LEN];  
int ia2=0;  
   
ir6=uc1616(cp1,[$ia2,0,rr4)]  
  
这样一切搞定.
作者: zhjb113    时间: 2005-7-18 17:49
看不懂你的例子为什么要加方括号,下面是一个例子,仅供参考:
int func(char *mess, double *pt)
{
    int ret = 0;
    int ptype[]={6,0};
    double pos[3]={0,0,0};
  
    if ( (ret = uc1616(mess, ptype, 0, pos)) != 5 ) return ret;
}
作者: QianFD    时间: 2005-7-19 10:44
好像是函数内外定义的rr指针不同吧,数组名本来就是指针,它的定义是指向指针的指针,函数内只定义成了指针
作者: jjf1120    时间: 2005-7-21 10:49
函数要输出一个点,应该是一个double类型的数组,你给出的却是一个double类型的变量,当然会出错了
换成数组应该就好了
作者: nihai0711501129    时间: 2011-11-17 09:40
非常谢谢大家  




欢迎光临 iCAx开思工具箱 (https://t.icax.org/) Powered by Discuz! X3.3