我希望函数具有相同的名称,但使用不同的命名空间。我在命名空间中声明了一个函数:
GPS.cpp
namespace NSpace_IMUandGPS
{
//Read GPS Data Set Raspberry Pi's Time and date
void ReadGPS(FD &Fd, bool &GPSready, bool &TimeConfigured, S_POS &POS, S_GPS&GPS, S_IMU &IMU, double &Velocity)
{
...
}
}
GPS.h
namespace NSpace_IMUandGPS
{
void ReadGPS(FD &Fd, bool &GPSready, bool &TimeConfigured, S_POS &POS, S_GPS &GPS, S_IMU &IMU, double &Velocity);
}
的main.cpp
我想在main中使用此函数,而不是在NSpace_IMUandGPS命名空间中声明的结构。那么,我该怎么做呢?如果我在命名空间中声明函数,是否必须在同一名称空间中定义所有变量?
答案 0 :(得分:1)
您可以使用::运算符来寻址命名空间。
语法:namespace::function();
所以,如果你想找到你,例如std命名空间使用:
std::merge();
如果您想使用您的代码,请使用:
NSpace_IMUandGPS:ReadGPS();
答案 1 :(得分:0)
您不需要在该命名空间中定义特定命名空间中使用的内容。
您的namespace NSpace_IMUandGPS
将成为全局无名空间的一部分。因此,如果函数structs
中使用的ReadGPS
不在任何其他命名空间内,那么您将发现在函数ReadGPS
内访问它们没有问题。
您可以按如下方式调用main
中的功能:
NSpace_IMUandGPS::ReadGPS(/*all the required parameters*/);
一般情况下,如果variables/functions
内未定义namespace
,则可以按名称使用它们。
如果在某些variables/functions
内定义namespace
,则需要在使用时指定namespace
。
例如:
struct XYZ
{
int c;
};
namespace ABC
{
int a;
struct PQR
{
int b;
};
Func_1(XYZ st1, PQR st2);
}
Func_2(XYZ st1, ABC::PQR st2);
struct XYZ and Func_2
是全局无名namespace
的一部分。
int a and struct PQR
是namespace ABC
的一部分。
现在,如果您看到Func_1
可以访问struct XYZ
,即使它未在namespace ABC
内定义。这是因为namespace ABC
本身就是全局无名namespace
的一部分。
但是,如果某个函数出现在全局无名namespace
中,例如Func_2()
,那么为了使用namespace ABC
中的内容,您需要指定namespace
之类的名称ABC::PQR
。