首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >声明由所有类C++访问的全局变量

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

Stack Overflow用户
提问于 2013-07-06 08:16:10
回答 2查看 3.5K关注 0票数 1

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

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

例如,

Im_Position.cpp

代码语言:javascript
复制
#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

代码语言:javascript
复制
#include "nav_msgs/Odometry.h"

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

我在Im_Position.cpp中得到了一个错误,它说在这个范围内没有声明vehicle_position。我不知道这是由我的编码风格还是Eclipse的链接问题造成的。我正在使用Ubuntu12.04和ROS环境。

Im_RobotKontrol.cpp

代码语言:javascript
复制
#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()
{
  ...
}

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

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-07-06 08:36:12

您还没有在任何地方定义vehicle_position。你的

代码语言:javascript
复制
extern position_type vehicle_position;

只表示某个地方存在一个Im_Robotcontrol.c.,并且只在position_type vehicle_position中编码。您需要做的是将extern声明放在需要到达该变量的文件可访问的头文件中,然后在一个c文件中定义它。例如,如

代码语言:javascript
复制
position_type vehicle_position;

在你的Im_Robotcontrol.c里。

票数 3
EN

Stack Overflow用户

发布于 2013-07-06 08:31:21

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

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17501081

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档