2016-11-25 4 views
0

私は非現実的なチュートリアルを見て、このコード行が発生しました:それは前方宣言ですC++ "class Name *"はクラスポインタですか?

class UStaticMeshComponent* Pickup; 

を。 私はしばらくの間、C++を勉強しており、このようなことはこれまでに遭遇していません。私はポインタとリファレンスについて知っていますが、私はこのフォーマットを見たことがありません:class Name *。別のクラスへのクラスポインタを作成していますか?クラス名の後ろに*をつけて検索しようとしましたが、データ型とポインタについての唯一の結果が出ました。

public: 
    APickUp(); 

    virtual void BeginPlay() override; 

    virtual void tick (float DeltaSeconds); 

private: 
    class UStaticMeshComponent* Pickup; 
+0

コードのスクリーンショットを投稿しないでください。テキストを(イメージにあてはまるものとして)使用し、それをコードとしてフォーマットする(ctrl-kショートカット) – bolov

答えて

3
class UStaticMeshComponent* Pickup; 

これはタイプclass UStaticMeshComponentを宣言してもUStaticMeshComponentへのポインタ型の変数を宣言しPickup。したがって、上記のコードは、多かれ少なかれ同等である。この時点で、あなたはUStaticMeshComponentの定義(単なる宣言を)持っていないので

class UStaticMeshComponent; 
UStaticMeshComponent* Pickup; 

UStaticMeshComponentは不完全な型と考えられています。あなたが不完全なタイプで行うことができるいくつかのことがあります。それらの1つは、それらへのポインタを宣言しています。

1

型へのポインタのみを使用している場合、型は完全である必要はないので、UStaticMeshComponentが定義されていなくても正常に動作します。これは、このヘッダがcppファイルの1つに含まれている場合、Pickup.hにヘッダが含まれていた場合よりも少し早くコンパイルする必要があることを意味します。ここでは、UStaticMeshComponentが定義されています。

このスピードアップは、ヘッダーの大きさと、コンパイル時にインクルードが何回回避されるかによって大きくなります。

関連する問題