我用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 )
如果我把这句注释掉,程序又可以通过,关了工程后又不行啦。。。。。。
这种情况是怎么回事啊?怎么关了工程后,编译器就不认了阿?