2017-07-09 2 views
0

Je souhaite initialiser la variable de transformation lors de la création de theGameObject, mais quelque chose ne va pas. Compilateur dit:Initialisation de membre de classe C++

C3646 'transform' : unknown override specifier (line 4) 
C4430 missing type specifier - int assumed. Note: C++ does not support default-int (line 4) 
C3861 'Transform': identifier not found (line 5) 
C2614 'GameObject' : illegal member initialization: 'transform' is not a base or member (line 5) 

    1. class GameObject 
    2. { 
    3. public: 
    4.  Transform transform; 
    5.  GameObject() : transform(Transform()) {} 
    6. }; 
    7. 
    8. class Transform 
    9. { 
    10. public: 
    11.  Vector3 position; 
    12.  Vector3 rotation; 
    13.  Vector3 dimension; 
    14. 
    15.  Transform() 
    16.  { 
    17.   position = Vector3(); 
    18.   rotation = Vector3(); 
    19.   dimension = Vector3(); 
    20.  } 
    21. } 

Dans main.cpp J'appelle:

GameObject theGameObject = GameObject(); 

Ce que j'ai fait de mal?

+1

Vous vous rappelez que pour pouvoir utiliser un symbole, il doit être déclaré ou peut-être même défini * avant * de l'utiliser? Essayez donc de changer l'ordre des définitions des deux classes et de voir si cela fonctionne mieux. –

+0

Un [mcve] est toujours une bonne addition à une question ... –

+0

Le problème est que la classe GameObject est déclarée dans GameObject.h et la classe Transform dans Transform.h GameObject.h comme #include "Transform.h", donc Je ne sais pas comment résoudre ce problème – Gugu

Répondre

1

Dans votre classe GameObject vous un Transform objet Transform transform; mais le compilateur n'a pas encore vu la classe Transform et donc il ne le sait pas sa taille ou ce qu'il est encore. Vous devez définir Transform puis GameObject au lieu de GameObject puis Transform. Vous souhaitez probablement séparer ces classes dans des fichiers d'en-tête individuels.


Side note: Vous pouvez juste faire GameObject theGameObject; aussi.