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.mzph.cn/news/77205.shtml

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

相关文章

583. 两个字符串的删除操作 -- 动规

583. 两个字符串的删除操作 class MinDistance:"""583. 两个字符串的删除操作https://leetcode.cn/problems/delete-operation-for-two-strings/description/"""def solution(self, text1: str, text2: str) -> int:"""这道题…

python中的小tips

1、注释 1、注释快捷键: Ctrl/ 可以注释掉光标所在的这一行,或者是选中的区域。 对于注释掉的这一行或者这一区域,按下ctrl/则会去掉注释。 2、多行注释 在写多行注释时,英文状态下写三个",会自动变成六个"&…

java创建线程的3种方式

方法一,直接使用 Thread import lombok.extern.slf4j.Slf4j;Slf4j(topic "c.Test1") public class Test1CreateThread {public static void main(String[] args) {Thread t new Thread(){Override// run 方法内实现了要执行的任务public void run() {l…

探索程序员需要掌握的算法?

文章目录 一:引言二:常见算法介绍三:重点算法总结 🎉欢迎来到数据结构学习专栏~探索程序员需要掌握的算法? ☆* o(≧▽≦)o *☆嗨~我是IT陈寒🍹✨博客主页:IT陈寒的博客🎈该系列文章…

【大数据Hive】hive 加载数据常用方案使用详解

目录 一、前言 二、load 命令使用 2.1 load 概述 2.1.1 load 语法规则 2.1.2 load语法规则重要参数说明 2.2 load 数据加载操作演示 2.2.1 前置准备 2.2.2 加载本地数据 2.2.3 HDFS加载数据 2.2.4 从HDFS加载数据到分区表中并指定分区 2.3 hive3.0 load 命令新特性 …

解决SVN文件不显示绿色小钩图标问题

问题描述: 今天重新安装了SVN,发现从中央服务器拉取文件到本地仓库后,对应的文件没有绿色的小钩图标,于是查了一下解决方案,在这里总结一下。 解决方案一: 原因:状态缓存设置问题造成的。 在…

【数据结构】树的基础知识及三种存储结构

💐 🌸 🌷 🍀 🌹 🌻 🌺 🍁 🍃 🍂 🌿 🍄🍝 🍛 🍤 📃个人主页 :阿然成长日记 …

【C++基础】lambda表达式

这个其实在QT中经常用到,但是之前自己学习的时候也是一知半解的,没有彻底的搞明白,在这里,做一个整理 文章参考:Lambda表达式 | 爱编程的大丙 lambda表达式定义了一个匿名函数,并且可以捕获一定范围内的变…

1143. 最长公共子序列 -- 动规

1143. 最长公共子序列 class LongestCommonSubsequence2:"""1143. 最长公共子序列https://leetcode.cn/problems/longest-common-subsequence/"""def solution(self, text1: str, text2: str) -> int:"""递归解法 备忘录自顶…

【SG滤波】三阶滤波、五阶滤波、七阶滤波(Matlab代码实现)

💥💥💞💞欢迎来到本博客❤️❤️💥💥 🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。 ⛳️座右铭&a…

linux grep操作汇总

汇总起来,备忘查看! 目录 1,找指定文本 2,查找时不区分大小写 3,在指定命令下递归查找 4,查找时显示字符串在文件中的行号 5,取反:找出文件中不包含指定内容的数据行 6&#x…

JDBC连接串配置JDBC日志(DM8:达梦数据库)

DM8:达梦数据库JDBC连接串配置JDBC日志 环境介绍1 Windows 环境程序配置2 Linux 环境程序配置 环境介绍 在某些环境,需要开启JDBC日志,用于分析业务系统连接数据库遇到的异常问题配置JDBC日志后,程序重启生效 1 Windows 环境程序配置 jdbc…

【C++】AVL树的插入操作实现以及验证是否正确(带平衡因子)

文章目录 前言一、AVL树结点的定义二、AVL树的插入(Insert)插入完整代码:1.左单旋(RotateL)2.右单旋(RotateR)3.先右单旋再左单旋(RotateRL)1.保存的bf为02.保存的bf为13…

Excel中将文本格式的数值转换为数字

在使用excel时,有时需要对数字列进行各种计算,比如求平均值,我们都知道应该使用AVERAGE()函数,但是很多时候结果却“不尽如人意”。 1 问题: 使用AVERAGE函数: 结果: 可以看到单元格左上角有个…

docker 方式安装mysql 主从方式keepalived实现高可用

一、环境介绍 二、MySQL安装 在两台服务器上都安装mysql 1、拉取镜像 docker pull mysql:8.0.272、创建挂载目录 mkdir -p /data/mysql/3、运行容器 主节点 docker run \--restartalways \--name master_mysql -p 3306:3306 \-e MYSQL_ROOT_PASSWORD123456 -d \-v /data/m…

基于视觉重定位的室内AR导航APP的大创项目思路(3)手机相机内参数据获取和相机标定

文章目录 相机内参为什么要获取相机的内参数据:获取相机内存数据的方法棋盘格标定自动相机标定 前情提要: 是第一次做项目的小白,文章内的资料介绍如有错误,请多包含! 相机内参 相机内参是本身的物理数据&#xff0c…

HTTP RESTFul RPC

一、简介 (1)HTTP(Hypertext Transfer Protocol)是一种应用层协议。它经常用于在Web和服务器之间通讯,或服务与服务之间通讯。 (2)RESTFul 约束HTTP协议实现上的规范设计。 (3&am…

消息队列MQ

一、消息队列 网络端的Http请求默认采用的是同步请求方式,客户端与服务器端是基于请求和响应模式进行通信的。也就意味着,客户端发起请求。必须要等待服务器端完成处理结果给客户端才能继续进行下一步操作,如果服务器发送网络延迟、宕机、卡顿…

使用C语言EasyX 创建动态爱心背景

简介 在计算机图形学的世界中,有很多方法可以使程序的界面更加吸引人。在本篇博客中,我将向大家介绍如何使用 EasyX 图形库在 C 中创建一个动态的爱心背景。这不仅是一个简单的动画效果,它还包括背景的星星、旋转的心形以及一个美观的背景渐…

Java基于SpringBoot+Vue的 4S店车辆管理系统

博主介绍:✌程序员徐师兄、7年大厂程序员经历。全网粉丝30W,Csdn博客专家、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ 文章目录 1 简介2 技术栈3 功能总览4 系统设计4.1 系统设计主要功能4.2 数据库设计4.2.1 数据库设计规范4.2…