C++编译静态成员函数报错: “osgGA::DriveManipulator::setEye”: 非静态成员函数的非法调用

来看代码

.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()函数。它们应该放在所有函数外部,位于文件范围或全局范围内。
如图是我放的位置
在这里插入图片描述

然后就可以编译不报错啦!大功告成
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/103619.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

浏览器连不上 Flink WebUI 8081 端口

安装 flink-1.17.0 后,start-cluster.sh 启动,发现浏览器连不上 Flink WebUI 的8081端口。 问题排查: command R,输入cmd,检查宿主机能否ping通虚拟机,发现能ping通。 检查是否有flink以外的任务占用8081…

论文阅读《Nougat:Neural Optical Understanding for Academic Documents》

摘要 科学知识主要存储在书籍和科学期刊中,通常以PDF的形式。然而PDF格式会导致语义信息的损失,特别是对于数学表达式。我们提出了Nougat,这是一种视觉transformer模型,它执行OCR任务,用于将科学文档处理成标记语言&a…

Android 10.0 禁用adb shell input输入功能

1.前言 在10.0的产品开发中,在进行一些定制开发中,对于一些adb shell功能需要通过属性来控制禁止使用input 等输入功能,比如adb shell input keyevent 响应输入事件等,所以就需要 熟悉adb shell input的输入事件流程,然后来禁用adb shell input的输入事件功能,接下来分…

基于STM32设计的格力空调遥控器

一、格力空调协议介绍 格力空调的红外控制协议被称为格力红外通讯协议或者格力红外遥控协议。这个协议定义了一系列红外信号,可以用来控制格力空调的各种操作,例如开关、温度控制、模式选择、风速控制等等。 格力空调的红外控制协议是一种自定义协议&a…

企业架构LNMP学习笔记14

默认官方模块: Gzip压缩: 压缩文件,使文件变小了,传输更快了,目前大部分市场浏览器都支持Gzip。 传输的时候省流量。 目的是为了提高用户的加载速度。 #开启gzip压缩 gzip on; #http协议版本 gzip_http_version 1.0…

Java虚拟机反射机制

1 什么是Java虚拟机反射机制? 虚拟机在运行期间,对于任何一个类,我们都能知道其内部信息,包括属性,方法,构造函数,实现接口;对于任何一个对象,我们都能获取其字段值、调…

Java(二)数据类型与变量以及运算符

数据类型与变量以及运算符 二、数据类型与变量(重要)2.数据类型2.1 基本数据类型 1.变量与常量1.1常量(字面常量)1.2变量数据类型小总结 三、运算符1.运算符号(重要)1.1计算运算符1.2增量运算符1.3 自增或自…

LeetCode 1126.查询活跃业务

数据准备 Create table If Not Exists Events (business_id int, event_type varchar(10), occurences int); Truncate table Events; insert into Events (business_id, event_type, occurences) values (1, reviews, 7); insert into Events (business_id, event_type, occu…

智能井盖传感器:高效守护城市道路安全

近年来,井盖出问题导致事故的报道时有发生,但却容易被公众所忽视。井盖作为城市基础设施的一部分,主要用于保护下方的供水管道、下水道以及电信线缆等。然而,由于长时间使用、缺乏维护、设计不合理等原因,井盖出现问题…

zookeeper/HA集群配置

1.zookeep配置 1.1 安装4台虚拟机 (1)按照如下设置准备四台虚拟机,其中三台作为zookeeper,配置每台机器相应的IP,hostname,下载vim,ntpdate配置定时器定时更新时间,psmisc&#xff…

【Docker】Docker的使用案例以及未来发展、Docker Hub 服务、环境安全的详细讲解

Docker的工具实践及root概念和Docker容器安全性设置 1. 使用案例2. Docker解决的问题3. Docker未来发展4. Docker Hub 服务5. 技术局限6. Docker环境安全7. 容器部署安全 1. 使用案例 Docker是一个命令行工具,它提供了中央“docker”执行过程中所需的所有工具。这使…

【动手学深度学习】--序列模型

文章目录 序列模型1.序列数据2.统计工具3.自回归模型3.1马尔科夫假设3.2潜变量模型 4.训练5.预测 序列模型 学习视频:序列模型【动手学深度学习v2】 官方笔记:序列模型 1.序列数据 想象一下有人正在看网飞(Netflix,一个国外的视…