2013-07-06 85 views
1

我們正在使用C++開發一個項目。我試圖爲每個類創建頭文件和源文件,只需在Eclipse中創建一個類即可。聲明由所有類訪問的全局變量C++

我想要實現的不是聲明一個全局變量,可以從所有的類訪問。

例如,

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

正是在這上面可以看出另一個源文件實際上宣佈,因爲我希望它在所有類別中使用。 任何幫助將不勝感激。

+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中。

+0

謝謝,它的工作。 – mozcelikors

0

這是因爲你的vehicle_position是在Im_RobotKontrol.cpp中聲明的,Im_Position.cpp和Im_RobotKontrol.cpp之間沒有鏈接。

順便說一句,你可以使用對象來完成這一切,而不是外部。