声明所有类C ++访问的全局变量

时间:2013-07-06 08:16:10

标签: c++ eclipse class global-variables

我们正在开发一个C ++项目。我正在尝试为每个类创建头文件和源文件,只需在Eclipse中创建一个类。

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

例如,

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;
}

Im_Position.h

#include "nav_msgs/Odometry.h"

class Im_Position {
    public:
        void Im_GetPosition(const nav_msgs::Odometry::ConstPtr& msg);
};

我在Im_Position.cpp中收到错误,指出在此范围内未声明vehicle_position。我不知道它是由我的编码风格还是Eclipse的链接问题引起的。我正在使用Ubuntu 12.04和ROS环境。

Im_RobotKontrol.cpp

#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()
{
  ...
}

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

2 个答案:

答案 0 :(得分:3)

您尚未在任何地方定义vehicle_position。您的

extern position_type vehicle_position;

仅表示position_type vehicle_position存在于某处,并且只能在 Im_Robotcontrol.c 中进行编码。您需要做的是将extern声明放在头文件中,该文件可以访问需要访问此变量的文件,然后您需要在一个 c文件中定义它。例如

position_type vehicle_position;

在你的Im_Robotcontrol.c中。

答案 1 :(得分:0)

这是因为您的vehicle_position在Im_RobotKontrol.cpp中声明,并且Im_Position.cpp和Im_RobotKontrol.cpp之间没有链接。

顺便说一下,你可以使用object来做这一切,而不是extern。