main() blog

プログラムやゲーム、旅、愛する家族について綴っていきます。

【UE4】ファイルスコープで宣言した変数、関数でビルドエラー

ファイルスコープや無名名前空間で変数や関数を宣言した場合、
異なるファイルで同名の変数や関数を宣言すると場合よってはビルドエラーになります。

  • Hoge1.cpp
static const FText VFXSocktNamePrefix = FText("VFX_");

namespace
{
    const float EnemyCheckRange = 1000.0f;
}
  • Hoge2.cpp
static const FText VFXSocktNamePrefix = FText("VFX_");

namespace
{
    const float EnemyCheckRange = 1000.0f;
}

UE4のunityビルドで同じファイルにまとめられた場合に重複定義としてビルドエラーになってしまいます。

そもそも同じ定義を使うのであればキチンと共通の定義すべきだし、もしくはクラスの定数として定義すべきです。

ここでの問題は後になってビルドエラーになってしまう点です。

実際、自分の環境ではビルドエラーにならず、コミットした後で自動ビルドでエラーになりました。

Module.HogeGame.1_of_14.cpp等のファイルを開いてみると以下の様なファイルになっています。

#include "HogeGame.h"

#include "Hoge1.cpp"
#include "Hoge2.cpp"

ファイルはアルファベット順になっていて、ファイル数なのか実際に展開されたファイルサイズなのかは分かりませんが 一定数ごとにファイルが分かれていきます。

ここでHoge1.cppとHoge2.cppが同じファイルにまとめられてしまうと重複定義となってビルドエラーになっていしまいます。