2017-07-09 58 views
0

我想在创建游戏对象时初始化变换变量,但出了问题。编译器说:类成员初始化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. } 

在main.cpp中我打电话:

GameObject theGameObject = GameObject(); 

我做了什么错?

+1

你确实应该记住,为了能够使用一个符号,它必须被声明,或者甚至可以在你使用它之前定义*。所以试着改变两个类定义的顺序,看看它是否更好。 –

+0

[mcve]总是一个很好的问题... –

+0

问题是GameObject类是在GameObject.h中声明的,Transform类中的Transform类是#include“Transform.h”中的 GameObject.h我不知道如何解决这个 – Gugu

回答

1

在你GameObject类,你有一个Transform对象Transform transform;但是编译器还没有看到Transform类然而,因而它不知道它的大小或者是什么,甚至是。你应该定义Transform然后GameObject而不是GameObject然后Transform。你可能也想在单独的头文件中分离这些类。


旁注: 你可以做GameObject theGameObject;了。