/ / Namespaces in C ++ - C ++, Namespaces

Namespaces in C ++ - C ++, Namespaces

Verwendung von Namespaces in C ++, auf die in verschiedenen Header-Dateien zugegriffen werden kann. Sagen wir, ich habe folgendes:

// namespaces
#include <iostream>
using namespace std;

namespace first
{
int var = 5;
}

namespace second
{
double var = 3.1416;
}

int main () {
cout << first::var << endl;
cout << second::var << endl;
return 0;
}

und ich möchte var-Variable aus dem ersten Namespace in einer anderen Klasse verwenden ... das ist definiert und in einer anderen .h und .cpp-Datei implementiert?

//server.h
#ifndef SERVER_H
#define SERVER_H
class server{
server();
//blah
};
#endif SERVER_H

//server.cpp
server::server()
{
first::var = 3;
}

Ist das möglich, so zu machen? Wenn ich versuche, bekomme ich einen Fehler, der besagt, dass mein Namensraum nicht definiert ist. Und wenn ich Namespace zuerst in der .h oder .cpp verwende, heißt das, dass kein Namespace zuerst aufgerufen wird ...

Antworten:

10 für die Antwort № 1

Neben dem Namespace in einem Header müssen Sie die Variable extern machen:

//header.h
namespace first
{
extern int var;
}


//implementation.cpp
#include "header.h"
namespace first
{
int var = 5;
}

Wenn die Variable nicht ist extern, ein Symbol wird überall dort generiert, wo der Header enthalten ist, und Sie erhalten Linker-Fehler.

Wenn Sie den zusätzlichen Header nicht möchten, können Sie einfach die Variable als deklarieren extern in demselben Namespace, in dem Sie es verwenden möchten:

//server.cpp
namespace first
{
extern int var;
}
server::server()
{
first::var = 3;
}

Hinweis Einige Antworten könnten behaupten, dass Sie die Variable machen sollten static. Das ist falsch, obwohl es kompiliert wird, da dann die Variable nicht als Global agiert. Eine Kopie davon wird für jede Übersetzungseinheit erstellt.