2

所以这就是我所拥有的:

//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.cppgraphics.cpp

所以我的问题是

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

4

2 回答 2

5

你误解了错误。

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

也使该变量extern

namespace graphics {
    extern camera_c &camera;
};

并且只在一个源文件中定义它。

namespace graphics {
    camera_c &camera = default_camera;
};
于 2013-01-19T20:11:57.717 回答
2

关于什么...

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

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

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

我必须补充一点,全局定义的变量是不好的风格;除非您处理的是遗留 API,否则它们会导致比其价值更多的问题!

于 2013-01-19T20:11:50.080 回答