我有一个我想在名为Spiral.cpp
的C ++源文件中使用的变量。已使用以下代码在头文件中声明该变量:
struct DataMessage{
...
::CORBA::Double radius;
...
};
内
namespace STEERDataIDL{
...
}
然后使用以下行在另一个名为Module.cpp
的源文件中给出了一个值:
radius = Interface.spiralRadius;
在case STEERDataIDL::SpiralPattern:
的功能:
void Module::FormList(void){
...
switch (this->InterCDNUSteerData.SteerMode)
{
....
}
}
如上面一行所示,这里给变量的值取自GUI上的用户输入。
如上所述,我正在尝试在我的Spiral.cpp
源文件中的函数中使用此变量:
void Module::FormList(); /*This is the function in which `radius` was given its value */
if(abs(someDistance) < (Data.radius + x)){
// Do XYZ
}
但是,我收到了一些我不理解的编译错误:
错误&#39;模块&#39;不是类或命名空间名称(在
void Module::
行上)&#39; X&#39;未声明的标识符
离开&#39; .radius&#39;必须有class / struct / union,type是&#34; unkown type&#34;
有谁可以向我解释我在这里做错了什么?我需要做些什么来解决这些编译错误?
答案 0 :(得分:0)
这里有很多问题。
(struct DataMessage....)
但不自行声明变量extern struct STEERDataIDL::DataMessage Data;
struct STEERDataIDL::DataMessage Data;
重要的是所有extern
都在文件范围内声明。从技术上讲,您可以将extern struct STEERDataIDL::DataMessage Data;
放在使用变量的行的前面,前提是它可以正确地解析范围。
答案 1 :(得分:0)
您必须包含声明Data的头文件,因此,Data的声明将如下所示:
//globals.h
#include "DataMessage.h"
extern DataMessage Data; //to indicate that Data will be created in a different cpp file and visible to other cpp files
然后你应该在一个cpp文件中创建数据,该文件包含声明变量Data的头文件,它可能如下所示:
//globals.cpp
#include "globals.h"
DataMessage Data;
现在在Module.cpp中你可能有这样的东西:
#include "globals.h"
...
void Module::FormList() {
Data.radius = Interface.spiralRadius; //notice how radius is accessible only through the Data variable
}
在Spiral.cpp中你应该有这样的东西:
#include "globals.h"
...
void Foo() {
if(abs(someDistance) < (Data.radius + x)) { //Data.radius is the same one across all files
// Do XYZ
}
}