読者です 読者をやめる 読者になる 読者になる

I From Japan Staff Blog

I From Japan の開発者ブログです

Unreal C++で、5分ぐらい詰まったコンパイルエラーの話

C++ Unreal Engine 4 プログラミング

blog.i-fromjapan.com

はじめに

どうもみなさん、おはこんばんにちわ。
レオンです!! 小ネタ程度なんですが、コンパイルエラーが起こったのでそれの原因となるファイルについても調べてみました。

「それ最後に置いてね」

C言語や、C++でよく聞くプロトタイプ宣言というのをご存知でしょうか?
使用する関数があったとして、その関数の定義を使用している箇所より下に書いてしまうと起きてしまうコンパイルエラーがあるので、きちんと最初に宣言する必要があります。

しかし、ヘッダファイルレベルで「このファイルは一番下に置いてくれ」みたいなのは聞いたことがありません。

".generated.h"というヘッダファイルを見たことがあると思います。

f:id:rerecchi:20161019201718p:plain

最初このように書いていたら、以下のようなコンパイルエラーが出てきました。

f:id:rerecchi:20161019201719p:plain

なんのことだろうと、出力を見ていると、.generated.hはヘッダファイルの中でも一番下に有る必要があるとのこと。ので、以下のように書き直しました。

f:id:rerecchi:20161019201716p:plain

ファイルの正体

このファイルは必ず

リフレクション データをすべて生成し、それをこのファイルに入れます。タイプを宣言するヘッダファイルの中で、このファイルを一番最後のインクルードとしてインクルードしなければなりません。

UE4 は、ガーベジコレクションシリアライズ、ネットワーク レプリケーション、ブループリント/C++ などの動的な機能を有効にするリフレクションの独自の実装を使用しています。

とのことです。

ちなみに、リフレクションとは、他のライブラリにはクラス名やメンバー名にアクセスレベル等の情報が格納されており、それらの情報(メタデータ)を動的に取り出す機能を指します。

さいごに

もし、質問があればコメントください。
答えられる範囲で返答します。

感想

  • 本当にC++コンパイルエラーはわかりづらいのでどうにかしてほしいです。
  • Python見やすい

参考

Unreal Engine | UE4 の C++ プログラミング入門

blog.i-fromjapan.com