命名空间中的函数

时间:2016-06-10 06:59:36

标签: c++ object namespaces structure

我希望函数具有相同的名称,但使用不同的命名空间。我在命名空间中声明了一个函数:

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命名空间中声明的结构。那么,我该怎么做呢?如果我在命名空间中声明函数,是否必须在同一名称空间中定义所有变量?

2 个答案:

答案 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 PQRnamespace ABC的一部分。

现在,如果您看到Func_1可以访问struct XYZ,即使它未在namespace ABC内定义。这是因为namespace ABC本身就是全局无名namespace的一部分。

但是,如果某个函数出现在全局无名namespace中,例如Func_2(),那么为了使用namespace ABC中的内容,您需要指定namespace之类的名称ABC::PQR