声明所有类C++; 我们正在研究C++中的一个项目。我试图通过在Eclipse中创建一个类来为每个类创建头文件和源文件

声明所有类C++; 我们正在研究C++中的一个项目。我试图通过在Eclipse中创建一个类来为每个类创建头文件和源文件,c++,eclipse,class,global-variables,C++,Eclipse,Class,Global Variables,我试图实现的不是声明一个可以从所有类访问的全局变量 比如说, Im_Position.cpp #include "Im_Position.h" void Im_Position::Im_GetPosition (const nav_msgs::Odometry::ConstPtr& msg) { vehicle_position.x_pose = msg->pose.pose.position.x; vehicle_position.y_pose = msg-&g

我试图实现的不是声明一个可以从所有类访问的全局变量

比如说,

Im_Position.cpp

#include "Im_Position.h"

void Im_Position::Im_GetPosition (const nav_msgs::Odometry::ConstPtr& msg)
{
    vehicle_position.x_pose = msg->pose.pose.position.x;
    vehicle_position.y_pose = msg->pose.pose.position.y;

    vehicle_position.x_orient = msg->pose.pose.orientation.x;
    vehicle_position.y_orient = msg->pose.pose.orientation.y;
    vehicle_position.z_orient = msg->pose.pose.orientation.z;
    vehicle_position.w_orient = msg->pose.pose.orientation.w;
}
#include "Im_Position.h"

typedef struct{
double x_pose;
double y_pose;
double x_orient;
double y_orient;
double z_orient;
double w_orient;
} position_type;

extern position_type vehicle_position;

int main()
{
  ...
}
Im_位置.h

#include "nav_msgs/Odometry.h"

class Im_Position {
    public:
        void Im_GetPosition(const nav_msgs::Odometry::ConstPtr& msg);
};
我在Im_Position.cpp中发现一个错误,表示车辆位置未在此范围内声明。我不知道是我的编码风格还是Eclipse的链接问题造成的。我正在使用Ubuntu 12.04和ROS环境

Im_RobotKontrol.cpp

#include "Im_Position.h"

void Im_Position::Im_GetPosition (const nav_msgs::Odometry::ConstPtr& msg)
{
    vehicle_position.x_pose = msg->pose.pose.position.x;
    vehicle_position.y_pose = msg->pose.pose.position.y;

    vehicle_position.x_orient = msg->pose.pose.orientation.x;
    vehicle_position.y_orient = msg->pose.pose.orientation.y;
    vehicle_position.z_orient = msg->pose.pose.orientation.z;
    vehicle_position.w_orient = msg->pose.pose.orientation.w;
}
#include "Im_Position.h"

typedef struct{
double x_pose;
double y_pose;
double x_orient;
double y_orient;
double z_orient;
double w_orient;
} position_type;

extern position_type vehicle_position;

int main()
{
  ...
}
它实际上是在上面可以看到的另一个源文件中声明的,因为我希望在所有类中都使用它。
任何帮助都将不胜感激。

这是因为您的
车辆位置
是在Im_RobotKontrol.cpp中声明的,Im_position.cpp和Im_RobotKontrol.cpp之间没有链接


顺便说一句,您可以使用object来完成这一切,而不是使用extern。

您还没有在任何地方定义
车辆位置。你的

extern position_type vehicle_position;
仅表示某个位置存在
位置\u类型车辆\u位置
,并且仅在Im\u Robotcontrol.c中进行编码。您需要做的是将
extern
声明放在需要访问此变量的文件可以访问的头文件中,然后您需要在一个c文件中定义它。例如

position_type vehicle_position;

在你的Im_Robotcontrol.c.

中,全局变量是个坏主意。尝试重新设计以避免使用它们。