在命名空间中有引用是否可行?

pme*_*son 2 c++ namespaces reference

所以这就是我所拥有的:

//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);
Run Code Online (Sandbox Code Playgroud)
//main.cpp

#include <graphics.hpp>

int main() {
    do stuff with graphics::camera;
}
Run Code Online (Sandbox Code Playgroud)

这给了我

main.o: multiple definition of graphics::camera
graphics.o: first defined here
Run Code Online (Sandbox Code Playgroud)

我也尝试过

camera_c &&camera = camera_c(ctor stuff);
Run Code Online (Sandbox Code Playgroud)

这给了我同样的错误,但来自main.cppgraphics.cpp

所以我的问题是

是否有一些可行的方法来引用该命名空间中的类?或者我应该只使用指针?理想情况下它应该是一个参考,但这可能是不可能的.

Dre*_*ann 5

你误解了这个错误.

该错误告诉您main.cpp和graphics.cpp都包含了违反One Definition Rule的 graphics.hpp .

也是这个变量extern:

namespace graphics {
    extern camera_c &camera;
};
Run Code Online (Sandbox Code Playgroud)

一个源文件中定义它.

namespace graphics {
    camera_c &camera = default_camera;
};
Run Code Online (Sandbox Code Playgroud)

  • @PatrickPowns一个包括警卫本身不会帮助你.包含防护将阻止一个编译单元定义它两次.但是在C++中,您必须防止在编译单元之间阻止多个定义. (3认同)