/ / Чи можливо мати посилання в просторі імен? - c + +, довідник, простору імен

чи можливо мати посилання в просторі імен? - c + +, довідник, простору імен

Ось що я маю:

//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;
}

і це дає мені

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

Я теж намагався робити

camera_c &&camera = camera_c(ctor stuff);

І це дає мені таку саму помилку, але від main.cpp і graphics.cpp

Так що моє запитання

Чи існує якийсь можливий спосіб мати посилання на клас у цьому просторі імен? Або я повинен просто використовувати покажчик? В ідеалі це має бути посиланням, але це може бути неможливо.

Відповіді:

5 за відповідь № 1

Ви неправильно зрозуміли помилку.

Помилка вказує на те, що main.cpp та graphics.cpp включають в себе графіку .hpp, яка порушує Одне визначення правила.

Зробіть цю змінну extern так само:

namespace graphics {
extern camera_c &camera;
};

І визначте це в лише один вихідний файл.

namespace graphics {
camera_c &camera = default_camera;
};

2 для відповіді № 2

А як на рахунок...

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

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

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

Я повинен додати, що глобально визначені змінні - це поганий стиль; якщо ви не маєте справжніх застарілих API, вони викликають більше проблем, ніж це варто!