1

lib ファイルの使用に移行し、CEREAL_REGISTER_DYNAMIC_INIT を適切に使用したいと考えました。これを使用する必要があるかどうかはわかりませんが、シリアル化タイプの 1 つが別の DLL で適切に取得されていないことに気付き、これが役立つかもしれないと考えました。

accountActions.h には、ファイルの最後に次のものがあります。

CEREAL_FORCE_DYNAMIC_INIT(mv_clientactions);

accountActions.cpp には、ファイルの上部近くに次のものがあります。

#include "clientActions.h"

#include "cereal/cereal.hpp"
#include "cereal/types/base_class.hpp"
#include "cereal/types/polymorphic.hpp"
#include "cereal/archives/adapters.hpp"

#include "cereal/archives/portable_binary.hpp"
#include "cereal/archives/json.hpp"

CEREAL_REGISTER_TYPE(CreatePlayer);
CEREAL_REGISTER_TYPE(LoginRequest);
CEREAL_REGISTER_TYPE(FindMatchRequest);
CEREAL_REGISTER_TYPE(ExpectedPlayersNoted);
CEREAL_REGISTER_DYNAMIC_INIT(mv_accountactions);

mv_accountactions が完全に構成された文字列であると仮定します。その名前のライブラリまたは dll はありませんが、これら 2 つのユニットをリンクするために使用されると考えましたか? ドキュメントはまばらで、これを間違って使用している可能性があります。

私が得ているエラーはこれです:

1> c:\git\bindstone\source\game\networklayer\accountactions.cpp(13): エラー C2084: 関数 'void cereal::detail::dynamic_init_dummy_mv_accountactions(void)' には既に本体があります 1> c:\git\ bindstone\source\game\networklayer\accountactions.h(127): 注: 「dynamic_init_dummy_mv_accountactions」の以前の定義を参照してください

再確認しましたが、他の場所では mv_accountactions を使用していません...これの原因や解決方法がわかりません。CEREAL_REGISTER_DYNAMIC_INIT が必要なのか、それとも DLL に移行して誤用した場合に備えて安全に使用する方法があるのか​​ 疑問に思っています。

アドバイスをいただければ幸いです。

ここで開かれた問題: https://github.com/USCiLab/cereal/issues/523

4

1 に答える 1