来看代码
.h文件中
static void computePosition(const osg::Vec3d& eye,const osg::Vec3d& lv,const osg::Vec3d& up);
void setEye(const osg::Vec3d& eye);
void setRotation( const osg::Quat& rotation );
osg::Vec3d   _eye;
osg::Quat    _rotation;
.cpp文件中
void DriveManipulator::computePosition(const osg::Vec3d& eye,const osg::Vec3d& center,const osg::Vec3d& up)
{
    osg::Vec3d lv = center-eye;
    osg::Vec3d f(lv);
    f.normalize();
    osg::Vec3d s(f^up);
    s.normalize();
    osg::Vec3d u(s^f);
    u.normalize();
    osg::Matrixd rotation_matrix(s[0],     u[0],     -f[0],     0.0,
                                 s[1],     u[1],     -f[1],     0.0,
                                 s[2],     u[2],     -f[2],     0.0,
                                 0.0,       0.0,       0.0,     1.0);
	setEye(eye);
	setRotation(rotation_matrix.getRotate().inverse());
}
void DriveManipulator::setEye(const osg::Vec3d& eye) {
	_eye = eye;
}
void DriveManipulator::setRotation(const osg::Quat& rotation) {
	_rotation = rotation;
}
但是会报错,说引用错误。
 这是因为把computePosition函数定义为static 引起的。
 解决办法:
 computePosition函数定义为static不能更改了(我的代码需求,static必须存在),所以要在它内部使用,需要把其它函数也改成静态的。
 更改如下:
.h文件
  static void setEye(const osg::Vec3d& eye);
  static void setRotation( const osg::Quat& rotation );
  
  static osg::Vec3d   _eye;
  static osg::Quat    _rotation;
.cpp文件
osg::Vec3d DriveManipulator::_eye;
osg::Quat DriveManipulator::_rotation;
关于.cpp文件那两行应该放在哪里,因为在类声明中声明了静态成员变量_eye和_rotation,需要在类定义文件(.cpp文件)中为它们分配存储空间。这两行代码不能放在任何函数内部,包括main()函数。它们应该放在所有函数外部,位于文件范围或全局范围内。
 如图是我放的位置
 
然后就可以编译不报错啦!大功告成
 



















