遇到奇怪的情况,请各位帮我看看程序

我用photon, 做一个界面,在一个按键的callback里添加了如下程序;
/* POSITION 3D Structure */
typedef struct Position3dStruct
{
float x;
float y;
float z;
} Position3d;

/* QUATERNION Structure */
typedef struct QuatRotationStruct
{
float q0;
float qx;
float qy;
float qz;
} QuatRotation;
typedef struct
{
unsigned long
ulFlags,
ulFrameNumber;
QuatRotation
rotation;
Position3d
translation;
float
fError;
}TransformInformation;
TransformInformation Xfrms[0xFF];

typedef struct QuatTransformationStruct
{
QuatRotation rotation;
Position3d translation;
} QuatTransformation;

void QuatRotatePoint( QuatRotation *RotationQuaternionPtr,
Position3d *OriginalPositionPtr,
Position3d RotatedPositionPtr )
{
Position3d
UCrossV; /
The cross product of the vector part of the rotation
quaternion with the original position vector */

if( OriginalPositionPtr->x < MAX_NEGATIVE ||
OriginalPositionPtr->y < MAX_NEGATIVE ||
OriginalPositionPtr->z < MAX_NEGATIVE )
{
RotatedPositionPtr->x =
RotatedPositionPtr->y =
RotatedPositionPtr->z = BAD_FLOAT;

return;
} /* if */

UCrossV.x = RotationQuaternionPtr->qy * OriginalPositionPtr->z

  • RotationQuaternionPtr->qz * OriginalPositionPtr->y;
    UCrossV.y = RotationQuaternionPtr->qz * OriginalPositionPtr->x
  • RotationQuaternionPtr->qx * OriginalPositionPtr->z;
    UCrossV.z = RotationQuaternionPtr->qx * OriginalPositionPtr->y
  • RotationQuaternionPtr->qy * OriginalPositionPtr->x;

RotatedPositionPtr->x = float(OriginalPositionPtr->x

  • 2.0 * ( RotationQuaternionPtr->q0*UCrossV.x
  • RotationQuaternionPtr->qy*UCrossV.z
  • RotationQuaternionPtr->qz*UCrossV.y ));
    RotatedPositionPtr->y = float(OriginalPositionPtr->y
  • 2.0 * ( RotationQuaternionPtr->q0*UCrossV.y
  • RotationQuaternionPtr->qz*UCrossV.x
  • RotationQuaternionPtr->qx*UCrossV.z ));
    RotatedPositionPtr->z = float(OriginalPositionPtr->z
  • 2.0 * ( RotationQuaternionPtr->q0*UCrossV.z
  • RotationQuaternionPtr->qx*UCrossV.y
  • RotationQuaternionPtr->qyUCrossV.x ));
    } /
    QuatRotatePoint */


    int mycallback(Ptwiget…)

{

return(Ptcontinue);

}

这个子函数没有创建之前到我写完,然后编译,运行,都没有什么问题,结果也是对的。但是我把这个工程 关掉后重新打开这个工程,就出现了如下的错误:
In file included from /root/20081201/sercheck/src/abmain.cc:37:
/root/20081201/sercheck/src/proto.h:26: error: variable or field ‘QuatRotatePoint’ declared void
/root/20081201/sercheck/src/proto.h:26: error: ‘QuatRotation’ was not declared in this scope
/root/20081201/sercheck/src/proto.h:26: error: ‘RotationQuaternionPtr’ was not declared in this scope
/root/20081201/sercheck/src/proto.h:26: error: ‘Position3d’ was not declared in this scope
/root/20081201/sercheck/src/proto.h:26: error: ‘OriginalPositionPtr’ was not declared in this scope
/root/20081201/sercheck/src/proto.h:26: error: ‘Position3d’ was not declared in this scope
/root/20081201/sercheck/src/proto.h:26: error: ‘RotatedPositionPtr’ was not declared in this scope
cc: /usr/qnx640/host/qnx6/x86/usr/lib/gcc/i386-pc-nto-qnx6.4.0/4.2.4/cc1plus error 1
make[2]: *** [abmain.o] Error 1
make[2]: Leaving directory /root/20081201/sercheck/x86/o-g' make[1]: *** [all] Error 2 make[1]: Leaving directory /root/20081201/sercheck/x86’
make: *** [all] Error 2

我在proto.h里看到有这个
void QuatRotatePoint( QuatRotation *RotationQuaternionPtr,
Position3d *OriginalPositionPtr,
Position3d *RotatedPositionPtr )
如果我把这句注释掉,程序又可以通过,关了工程后又不行啦。。。。。。
这种情况是怎么回事啊?怎么关了工程后,编译器就不认了阿?

知道问题的原因了。。。
再问另一个问题,想用PtAppAddFd () 来读串口里面的数据,看了半天help,还是不知道怎么用int PtAppAddFd( PtAppContext_t app,
int fd,
unsigned mode,
PtFdProc_t fun,
void *data);
其中变量 PtFdProc_t fun就是要调用的函数对吧?打个比方我要把收到的数显示出来再发出去,是不是就是在这个fun()函数里写??
最后这个void *data是什么用的?
有没有哪位大侠能给个例子啊????
感激不禁!!!!