【问题标题】:Declare global variable that is accessed by all classes C++声明所有类 C++ 都可以访问的全局变量
【发布时间】:2013-07-06 08:16:10
【问题描述】:

我们正在开发一个 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 中收到一个错误,指出未在此范围内声明车辆位置。我不知道它是由我的编码风格还是 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()
{
  ...
}

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

【问题讨论】:

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

标签: c++ eclipse class global-variables


【解决方案1】:

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

extern position_type vehicle_position;

仅表示position_type vehicle_position 存在于某处,并且仅用于Im_Robotcontrol.c 中的代码。您需要做的是将extern 声明放在需要访问此变量的文件可访问的头文件中,然后您需要在one c 文件中定义它。例如作为

position_type vehicle_position;

在您的 Im_Robotcontrol.c.中

【讨论】:

    【解决方案2】:

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

    顺便说一句,您可以使用 object 而不是 extern。

    【讨论】:

      猜你喜欢
      • 2022-08-16
      • 1970-01-01
      • 2020-01-15
      • 1970-01-01
      • 1970-01-01
      • 2014-05-14
      • 2021-10-08
      • 1970-01-01
      • 2016-05-16
      相关资源
      最近更新 更多