C++ 未声明外部变量

C++ 未声明外部变量,c++,publish-subscribe,extern,ros,C++,Publish Subscribe,Extern,Ros,我正在尝试将一个变量从main.cpp传递到message.cpp 我的情况基本上是这样的(删除代码中不相关的部分): main.cpp extern ros::Publisher pub; int main(int argc, char* argv[]) { ros::NodeHandle nh("~"); pub = nh.advertise<myws_ros::Message>("/myws_ros/message", 1000); } #include

我正在尝试将一个变量从main.cpp传递到message.cpp

我的情况基本上是这样的(删除代码中不相关的部分):

main.cpp

extern ros::Publisher pub;

int main(int argc, char* argv[])
{
    ros::NodeHandle nh("~");
    pub = nh.advertise<myws_ros::Message>("/myws_ros/message", 1000);

}
#include <main.cpp>
void onAction()
{ 
    //write message
    pub.publish(message)
}
extern ros::Publisher pub;
int main(int argc,char*argv[])
{
ros::NodeHandle nh(“~”);
pub=nh.advertive(“/myws\u ros/message”,1000);
}
message.cpp

extern ros::Publisher pub;

int main(int argc, char* argv[])
{
    ros::NodeHandle nh("~");
    pub = nh.advertise<myws_ros::Message>("/myws_ros/message", 1000);

}
#include <main.cpp>
void onAction()
{ 
    //write message
    pub.publish(message)
}
#包括
无效操作()
{ 
//写消息
发布(消息)
}
编译时未出现以下错误:

错误:未在此作用域中声明“pub”


我认为包括main,其中pub是一个外部变量,应该声明它。我做错了什么?

包括message.cpp中的main.cpp肯定是错误的。您只需在一个翻译单元中声明
pub
。由于它的定义是
extern
is main.cpp,所以您只需声明它
ros::Publisher pub中的code>“我认为包括main,其中pub是一个外部变量,应该声明它。”不,这在基本层面上是错误的。我推荐一本好的入门书。
#在
消息中包含
。cpp
不是一个好主意。这(至少)重复了
int main()
的定义。(修复发布问题后,可能会出现链接错误。)目前没有main.h,我反对为main函数创建它,但我认为这可能是我所需要的。在message.cpp(nodehandle和advision)中创建发布者之前,该程序正在运行,但现在我需要创建它,因为我运行了main,只需在执行操作时发布消息。