/ / Ist es machbar, eine Referenz in einem Namensraum zu haben? - C ++, Referenz, Namespaces

ist es möglich, eine Referenz in einem Namensraum zu haben? - C ++, Referenz, Namespaces

Also das ist was ich habe:

//graphics.hpp
#include guard

extern camera_c default_camera;

namespace graphics {
camera_c &camera = default_camera;
};

#endif


//graphics.cpp

camera_c default_camera(ctor stuff);

//main.cpp

#include <graphics.hpp>

int main() {
do stuff with graphics::camera;
}

und das gibt mir

main.o: multiple definition of graphics::camera
graphics.o: first defined here

Ich habe es auch versucht

camera_c &&camera = camera_c(ctor stuff);

Und das gibt mir den gleichen Fehler, aber aus main.cpp und graphics.cpp

Also meine Frage ist

Gibt es eine Möglichkeit, einen Verweis auf eine Klasse in diesem Namespace zu haben? Oder sollte ich nur einen Zeiger verwenden? Idealerweise sollte es eine Referenz sein, aber das ist vielleicht nicht möglich.

Antworten:

5 für die Antwort № 1

Sie missverstehen den Fehler.

Der Fehler sagt Ihnen, dass main.cpp und graphics.cpp beide graphics.hpp enthielten, was gegen die Eine Definitionsregel.

Mache diese Variable extern auch:

namespace graphics {
extern camera_c &camera;
};

Und definiere es in nur eine Quelldatei.

namespace graphics {
camera_c &camera = default_camera;
};

2 für die Antwort № 2

Wie wäre es mit...

// graphics.hpp
namespace graphics {
extern camera_c camera;
}

// graphics.cpp
#include <graphics.hpp>

namespace graphics {
camera_c camera(...);
}

Ich muss hinzufügen, dass global definierte Variablen einen schlechten Stil haben; Sofern Sie nicht mit älteren APIs zu tun haben, verursachen sie mehr Probleme, als sie wert sind!