我正在尝试使用Eclipse为一个涉及Gazebo(一个流行的机器人模拟器)的项目进行开发。Gazebo提供了一个插件系统,允许与模拟器进行外部交互,并提供了一系列关于如何编写插件的教程。
在成功地学习了这些教程之后,我尝试将代码迁移到Eclipse,使用cmake-g“Eclipse cdt4-unix makefiles”[buildpath]生成一个Eclipse rpoject,然后将其导入到我的Eclipse工作区。
一切都很顺利,但我遇到了一个有点奇怪的问题:
当我编译我的项目时,Eclipse返回时出现“Member declaration not Found”错误,该错误引用了ModelPush::Load函数的签名中使用的SDFormat数据类型(请参见下面的代码片段)。SDFormat附带地是一个机器人XML,用于描述机器人是如何组合在一起的。
尽管出现了这个错误(应该不会生成任何内容),但最终生成的共享库仍然会生成。
我想我可以接受它,但我显然希望解决这个问题,它似乎是Eclipse/CDT内部的问题。
澄清:
我试图确定为什么Eclipse在model_push.cc
中的Load()函数签名上给出错误:“Member declaration not found”。有罪的一方是sdf::elementptrsdf
参数。SDFormat库或者Eclipse/CDT查看它的方式有问题。这不是包含问题。而且,即使Eclipse给了我错误,它仍然构建了.so文件。从命令行运行make也会生成文件,但不会出现任何错误。
再说一遍,我可以忍受,但我宁愿不要。我只是不知道从哪里开始寻找一个解决方案,因为这不是一个问题,找到一个包含或sdf库文件。
下面是类声明(mode_push.hh):
#ifndef MODEL_PUSH_HH_
#define MODEL_PUSH_HH_
#include <boost/bind.hpp>
#include <gazebo/gazebo.hh>
#include <gazebo/physics/physics.hh>
#include <gazebo/common/common.hh>
#include <stdio.h>
#include <sdf/sdf.hh>
namespace gazebo
{
class ModelPush : public ModelPlugin
{
public:
void Load (physics::ModelPtr _parent, sdf::ElementPtr _sdf);
//Called by the world update start event
void OnUpdate (const common::UpdateInfo & /*_info*/);
//Pointer to the model
private:
physics::ModelPtr model;
//Pointer to the update event connection
private:
event::ConnectionPtr updateConnection;
};
}
#endif /* MODEL_PUSH_HH_ */
下面是实现文件(Model_Push.cc):
#include "model_push.hh"
namespace gazebo
{
void ModelPush::Load(physics::ModelPtr _parent, sdf::ElementPtr _sdf)
//void ModelPush::Load (physics::ModelPtr _parent, sdf::ElementPtr /*sdf*/)
{
//Store the pointer to the model
this -> model = _parent;
//Listen to the update event. This event is broadcast every
//simulation iteration.
this -> updateConnection = event::Events::ConnectWorldUpdateBegin(
boost::bind (&ModelPush::OnUpdate, this, _1));
}
//Called by the world update start event
void ModelPush::OnUpdate (const common::UpdateInfo & /*_info*/)
{
//Apply a small linear velocity to the model.
this -> model -> SetLinearVel (math::Vector3 (0.03, 0.0, 0.0));
}
//Register this plugin with the simulator
//GZ_REGISTER_MODEL_PLUGIN(ModelPush)
}
我一直在纠结这个问题。我已经找到了一个可行的解决办法,但我仍然不认为是理想的。我没有使用cmake(或catkin_make)生成eclipse项目,而是使用CDT project Builder生成它。下面是我在Eclipse2018-09中使用的过程。
创建C++托管构建类型的新C/C++项目(使用CDT的托管构建系统构建的C++项目。)
项目名称:ROSWorkspace位置:/home/username/eclipse-workspace/ROSWorkspace项目类型:Makefile Project/Empty Project工具链:Linux GCC
完成。
右键单击项目并选择Properties。
C/C++Build/Builder stetings:取消选中“使用默认生成命令”生成命令:catkin_make生成目录:${workspace_loc:/../catkin_ws}/
C/C++常规/路径和符号/包含选项卡添加/usr/include/gazebo-8添加/usr/include/sdformat-5.3
C/C++通用/预处理器包含/提供程序选项卡CDT GCC内置编译器设置/获取编译器规范的命令:${Command}${FLAGS}-e-p-v-dd“${INPUTS}”-std=C++11
单击“确定”,然后从下拉菜单中选择:Project/C/C++Index/Freshen all files
理想的情况下,我会花时间去研究如何让预处理器正确地处理生成的项目,但我现在没有时间。希望这能帮上忙。
我有以下代码片段 我尝试运行应用程序时出现以下错误(部分) 似乎type="num "没有被处理。我怀疑年龄int也可能是一个问题,因为它是一个int,但需要一个string。从sting到int的反向转换也可能是一个问题。 任何帮助是值得赞赏的。 谢谢
我用无数次的谷歌搜索尝试了这么多次。但这行不通。它给出了一个BeanCreationException。 pom.xml```https://maven.apache.org/xsd/maven-4.0.0.xsd“>4.0.0 org.springframework.Boot spring-boot-starter-parent 2.2.6.release com.example Registe
我创建了一个简单的. proto文件并执行了编译器(protoc-2.5.0rc1-win32.zip)。为规定的包生成了一个java文件。但是,生成的文件不会编译。. proto文件很简单,只有一条消息,其中包含一堆简单类型的可选字段(正确编号)。. java文件不编译,例如: 构造函数生成了消息。FieldAccessorTable(Descriptors.Descriptor,字符串[])未
我有一个JS应用程序。它在linux上运行良好,但在Windows10中我遇到了一个错误。 不正确的代码是 我在github中找到了这个错误的原因,我想问题是spawn nodejs spawn Doc在windows中无法正常工作。但我不知道如何修改这段代码使其工作。有人能帮我吗?
我尝试在android studio中创建我的第一个项目,使用我尝试运行应用程序的一个示例,但是gradle给了我这个构建错误(没有更改一行代码--只是尝试运行空活动): Gradle:Failure:生成失败,出现异常。*错误:任务“:PassiveLocation:PackageDebug”执行失败。
我正在进行maven构建,但是它得到了一个与依赖项相关的错误。如果我(和其他开发人员)在我们的本地机器或其他linux服务器上构建它,它就不会出现任何问题。但是,在一个特定的linux服务器上,它在构建时会出现以下错误。 maven生成错误: [错误]无法对项目CorporateInterface执行目标:无法解析项目COM的依赖项。TravelLinck:CorporateInterface:W