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 の両方に、1 つの定義規則に違反する graphics.hpp が含まれていることを示しています。

その変数も作成externします。

namespace graphics {
    extern camera_c &camera;
};

また、 1 つのソース ファイルでのみ定義します。

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 に答える