声明所有类C++都可以访问的全局变量
Declare global variable that is accessed by all classes C++
我们正在用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()
{
...
}
它实际上是在上面可以看到的另一个源文件中声明的,因为我希望它能在所有类中使用。任何帮助都将不胜感激。
您还没有在任何地方定义vehicle_position
。您的
extern position_type vehicle_position;
仅表示某个地方存在position_type vehicle_position
,并且仅在Im_Robotcontrol.c中进行编码。您需要做的是将extern
声明放在一个头文件中,该头文件可访问需要访问该变量的文件,然后您需要在一个c文件中定义它。例如
position_type vehicle_position;
在您的Im_Robotcontrol.c.
这是因为您的vehicle_position
是在Im_RobotKontrol.cpp中声明的,并且Im_Position.cpp和Im_Robot Kontrol..cpp之间没有链接。
顺便说一句,你可以用object而不是extern来完成这一切。
相关文章:
- 对全局变量的多线程访问:我应该使用互斥锁吗?
- cuda:多个线程访问同一个全局变量
- 访问类对象以与全局变量进行比较
- Qt C++创建一个所有类都可以访问的全局变量
- 访问另一个.cpp文件中的.cpp文件中定义的全局变量
- 如何使用 c++ 中的函数访问全局变量?
- 如何在不使用全局变量的情况下访问 lambda 中的变量
- 避免使用大量全局变量或使其易于访问和修改的最佳方法
- 如何访问从C 编译的动态库中定义的全局变量
- 通过使用全局变量的函数访问在给定范围内被覆盖的变量
- 如何从 C++ 源文件访问 C 源文件中的全局变量
- 可以静态访问全局静态变量的静态函数
- C++中是否可以通过非模板函数访问全局模板变量
- 如何在可执行文件中从.so访问全局变量
- 访问函数 c++ 中的全局变量
- 如何在cuda上创建全局可访问的变量
- C++:为什么与访问全局变量相比,访问类数据成员如此缓慢
- C++-访问全局变量对象
- 访问全局变量以修改值
- 无法从 Visual C++ 窗体应用程序中的窗体访问全局变量