- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试将一些用于测试的函数传递到 main()
节点中,如下所示。但是,我得到以下信息 non static member reference must be relative to a specific object
。我正在对这个问题进行大量研究,例如我发现 this也有类似的问题this is useful那是在解释如何访问和理解与“父”实例的关系。我应用了建议 here多亏了传递 madgwick::MADGWICK_reader obj(std::string file);
在主体上,我能够部分访问具有函数 的
我正在尝试从 class MADGWICK_reader
>void filter_function(const sensor_msgs::Imu &msg);main
访问,但仍然有些地方不完全正确。
我知道通过简单地添加“static”关键字来使成员静态化是不正确的,我也需要定义它们,这就是为什么函数专门设置为void的原因filter_function(const sensor_msgs::Imu &msg);
我传递 ampersend &
是为了通过对 main
的引用传递它,但似乎从未收到该函数。
这是 madgwick_filter.h,注意 void filter_function(const sensor_msgs::Imu &msg);
函数在 main< 中有问题
:
namespace madgwick
{
using timestamp_t = uint64_t;
using timestampToDouble_t = double;
struct IMU_MADGWICK_DATA
{
double magz;
double magy;
double magx;
float accelz;
float accelx;
float accely;
unsigned long timestamp;
double phi; // orientation
double psi; // orientation
double theta; // orientation
double gyrox; // angular velocity x
double gyroy; // angular velocity y
double gyroz; // angular velocity z
};
class Madgwick
{
public:
Madgwick();
};
class MADGWICK_reader
{
public:
MADGWICK_reader(std::string filename);
bool nextLine();
bool nextLineWithSupport();
IMU_MADGWICK_DATA madgwick_data;
sensor_msgs::Imu imuMadgwickMsg;
sensor_msgs::MagneticField magMedgwickMsg;
geometry_msgs::QuaternionStamped q;
geometry_msgs::Vector3Stamped v;
geometry_msgs::TransformStamped q_trans;
float sampleFreq;
double beta;
double q0=1.0, q1=0.0, q2=0.0, q3=0.0;
std_msgs::Header header;
float ax, ay, az, gx, gy, gz;
ros::Duration dtime;
float dt;
float invSqrt();
void qua2Euler(geometry_msgs::QuaternionStamped);
void madgwickIMU(float gx, float gy, float gz, float ax, float ay, float az);
void filter_function(const sensor_msgs::Imu &msg);
private:
io::CSVReader<13> madg_imu_reader;
unsigned int imuMadgNum;
unsigned int magMadgNum;
void packMadgMagMsg();
void pack_Imu_Madgwick_Msg();
void pack_Mag_Madgwick_Msg();
};
}
madgwick_filter.cpp
namespace madgwick
{
Madgwick::Madgwick()
{
}
MADGWICK_reader::MADGWICK_reader(std::string filename):
madg_imu_reader(filename)
{
// operations ...
}
void MADGWICK_reader::filter_function(const sensor_msgs::Imu &msg)
{
timestampToDouble_t currentTime = (madgwick_data.timestamp)/1e6;
ros::Time stamp(currentTime);
header = msg.header;
ax = float(msg.linear_acceleration.x);
ay = float(msg.linear_acceleration.y);
az = float(msg.linear_acceleration.z);
// more operations ...
}
}
最后是 madgwick_filter_node.cpp
#include "imu_filter_madgwick/madgwick_filter.h"
#include <iostream>
int main(int argc, char** argv)
{
ros::init(argc, argv, "madgwick_filter_node");
madgwick::MADGWICK_reader reader(std::string filename);
ros::NodeHandle n;
ros::Publisher pub1 = n.advertise<geometry_msgs::QuaternionStamped>("quaternion", 1);
ros::Publisher pub2 = n.advertise<geometry_msgs::Vector3Stamped>("ypr", 1);
tf::TransformBroadcaster q_brodecaster;
madgwick::MADGWICK_reader obj(std::string file);
ros::Subscriber sub = n.subscribe("imu0", 10, obj.filter_function); // <-- Error Here
ros::spin();
}
谁能指出正确的方向或解释为什么仍然无法从 main
访问类中包含的函数?感谢您阐明这一点。
最佳答案
由于您没有提供订阅声明,但您的问题似乎与将类成员函数传递给其他函数有关,因此下面的解决方案提供了两种实现方法,一种通过 lambda,另一种通过绑定(bind)。
#include <iostream>
#include <functional>
class Test{
public:
void fun(int x)
{
std::cout<<"I am having fun in Test with number "<<x<<std::endl;
}
};
void sampleFunction(std::function<void(int)> sf,int x)
{
sf(x);
}
int main()
{
Test obj;
auto objf = std::bind(&Test::fun,&obj,std::placeholders::_1);
sampleFunction(objf,5);
auto lf = [&obj](int y) { return obj.fun(y); };
sampleFunction(lf,6);
return 0;
}
关于c++ - 如何解决访问不同函数的 "nonstatic member reference must be relative to a specific object",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56263914/
我们有一个包含重复用户记录的数据库,我需要根据几个因素选择“最佳”用户: 应先选择具有成员(member)资格的用户,然后再选择没有成员(member)资格的用户 成员(member)有级别,在所有条
不知道为什么 Visual Studio 发出此警告: Access of shared member, constant member, enum member or nested type thr
我有一个数据库设置来注册网站的成员(member)专用区域的成员(member)。我可以使用复选框回显所有注册成员,以便我可以选择从管理页面删除单个成员,但我似乎无法弄清楚如何在单击提交按钮时选择删除
假定前缀一元运算符可以“由不带参数的非静态成员函数或带一个参数的非成员函数实现”(§13.5.1[over.unary]/1),除了适用于任何成员/非成员函数选择的通常封装/代码重用设计原理之外,还有
拥有 struct Person { string name; }; Person* p = ... 假设没有运算符被重载。 哪个更有效(如果有的话)? (*p).name 对比 p->name
进程文件: members-area or members-area.exe 进程名称: 5-1-61-96 进程类别:存在安全风险的进程 英文描述: 
引用资料 http://msdn.microsoft.com/en-us/library/6tc47t75%28v=VS.80%29.aspx http://msdn.microsoft.com/en
这个问题在这里已经有了答案: Is there any reason to use this-> (16 个答案) 关闭 7 年前。 这有什么区别: int MyClass::getId() {
我正在制作一个网站,您需要在其中注册,然后创建一个角色来玩。我如何将注册页面中使用的表格与玩家的表格结合起来,以便玩家始终获得他创建的角色。 我有一个表members,用于存储注册用户以及角色的 ta
我处于困境中,我被委托(delegate)创建一个 PHP Web 应用程序,该应用程序允许一个人注册,然后该用户可以再注册 5 个其他用户,他注册的其他用户也可以每个注册 5 个成员。 我希望创建数
我试图在成员(member)页面上显示一个非常简单的用户名。我已经在 stackoverflow 上搜索过,但使用我发现的内容不起作用。 我使用 HTML 表单指南中非常常见的注册/登录脚本,该脚本使
我正在使用CodeIgniter,我的问题是关于MySQL查询。我有两个表,分别是成员和关系。 成员表 我正在做的是,根据member_type将所有用户添加到成员表中。如果 member_type
我有一个表,用于存储 2 个成员(成员 A 和成员 B)之间的聊天信息。现在,当成员 A 删除他的消息时,我会抛出这样的 sql 请求 $deleting = mysqli_query($connec
from bs4 import BeautifulSoup import requests r = requests.get('http://medicalassociation.in/doctor-
我有两个我无法修改的类,它们都具有完全相同的成员: class Pose1 { public: double x,y; }; class Pose2 { public: d
我正在测试服务器上运行机器人。当前 channel 中有 3 个成员(member_count of 3),但它只返回一个成员。该成员是机器人。 代码: import discord from dis
我有一个对象,我们称之为 o,以及对 o 的引用。 在o范围内,我设置了一个成员,我们称之为m。 所以在 o 中,我调用: o.m = "blah" 在 o 之外,我访问 m: console.log
我正在尝试实现自定义成员(member)资格提供程序并希望更改 GetUser 方法。问题是 GetUser 返回 MembershipUser,而我想返回 MyMembershipUser,它有两个
我的网站有一个推荐给 friend 的按钮。为了鼓励人们使用此功能,我想用积分奖励那些使用它的人(积分将兑换奖品......还不知道)。 好的,所以我有这样的结构: 表单.php 您可以在此处输入 f
我在 MySQL 中有三个表, 组(键:group_id) 成员(键:member_id) group_member_relations 键:group_id, member_id 最后一个表包含 m
我是一名优秀的程序员,十分优秀!