2016-06-10 20 views
0

Ich möchte Funktionen mit dem gleichen Namen, aber mit anderen Namespace. Ich habe eine Funktion in einem Namespace deklariert:Funktionen in einem Namespace

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

Ich möchte diese Funktion in main mit Strukturen verwenden, die nicht im NSpace_IMUandGPS-Namespace deklariert sind. Also, wie soll ich das machen? Wenn ich die Funktion in einem Namespace deklariere, müssen alle Variablen in demselben Namespace definiert werden?

Antwort

0

Sie müssen die in einem bestimmten Namespace verwendeten Dinge nicht in diesem Namespace definieren.

Ihre namespace NSpace_IMUandGPS wird Teil des globalen namenlosen Namespace sein. Wenn also structs, die in der Funktion ReadGPS verwendet werden, nicht in einem anderen Namespace enthalten sind, werden Sie innerhalb der Funktion ReadGPS kein Problem haben.

Sie können die Funktion in main rufen Sie wie folgt vor:
NSpace_IMUandGPS::ReadGPS(/*all the required parameters*/);

Im Allgemeinen, wenn variables/functions nicht in jedem namespace definiert sind, dann können sie durch ihren Namen selbst verwendet werden.

Wenn variables/functions in einigen namespace definiert sind, müssen Sie die namespace angeben, wenn Sie sie verwenden.

Zum Beispiel:

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 sind Teil der globalen namenlos namespace. int a and struct PQR sind Teil von namespace ABC.

Jetzt, wenn Sie sehen Func_1 kann struct XYZ zugreifen, obwohl es nicht innerhalb namespace ABC definiert ist. Dies liegt daran, namespace ABC ist selbst Teil der globalen namenlosen namespace.

Aber wenn eine Funktion, die Inorder in globalen namenlos namespace wie Func_2() dann vorhanden ist, die Dinge zu verwenden, innerhalb namespace ABC, müssen Sie den Namen namespace wie ABC::PQR angeben.

1

Sie können einen Namespace mit dem Operator :: ansprechen. Syntax: namespace::function();

So im Falle wannt Sie zu Ihnen, in Beispiel den std-Namespace verwenden:
std::merge();
und wenn Sie Ihren Code verwenden verwenden:
NSpace_IMUandGPS:ReadGPS();