Opened 3 years ago

Closed 3 years ago

#5898 closed defect (fixed)

Compilation errors with PCH disabled

Reported by: Arfrever Frehtes Taifersar Arahesis Owned by: wraitii
Priority: Release Blocker Milestone: Alpha 24
Component: Core engine Keywords:
Cc: Patch:

Description

When PCH is disabled (--without-pch option passed to premake5), compilation of 2 files fails:

CCmpObstruction.cpp
x86_64-pc-linux-gnu-g++ -march=native -O2 -pipe -Wall  -DNDEBUG -MMD -MP -DNDEBUG -DCONFIG_FINAL=1 -DLIB_STATIC_LINK -DINSTALLED_BINDIR=/usr/bin -DINSTALLED_DATADIR=/usr/share/0ad -DINSTALLED_LIBDIR=/usr/lib64/0ad -DCONFIG_ENABLE_PCH=0 -I../../../source/pch/simulation2 -I../../../source -isystem /usr/include/nspr -fno-rtti -std=c++17 -fvisibility=hidden -isystem /usr/include/mozjs-78 -include /usr/include/mozjs-78/js/RequiredDefines.h -o "obj/simulation2_Release/CCmpObstruction.o" -MF "obj/simulation2_Release/CCmpObstruction.d" -c "../../../source/simulation2/components/CCmpObstruction.cpp"
../../../source/simulation2/components/CCmpObstruction.cpp:54:30: error: ‘Obstruction’ has not been declared
   54 |  DEFAULT_COMPONENT_ALLOCATOR(Obstruction)
      |                              ^~~~~~~~~~~
../../../source/simulation2/components/CCmpObstruction.cpp:54:2: error: ISO C++ forbids declaration of ‘DEFAULT_COMPONENT_ALLOCATOR’ with no type [-fpermissive]
   54 |  DEFAULT_COMPONENT_ALLOCATOR(Obstruction)
      |  ^~~~~~~~~~~~~~~~~~~~~~~~~~~
../../../source/simulation2/components/CCmpObstruction.cpp:54:41: error: expected ‘;’ at end of member declaration
   54 |  DEFAULT_COMPONENT_ALLOCATOR(Obstruction)
      |                                         ^
      |                                          ;
../../../source/simulation2/components/CCmpObstruction.cpp: In static member function ‘static void CCmpObstruction::ClassInit(CComponentManager&)’:
../../../source/simulation2/components/CCmpObstruction.cpp:50:3: error: invalid use of incomplete type ‘class CComponentManager’
   50 |   componentManager.SubscribeToMessageType(MT_PositionChanged);
      |   ^~~~~~~~~~~~~~~~
In file included from ../../../source/simulation2/system/IComponent.h:24,
                 from ../../../source/simulation2/system/Interface.h:21,
                 from ../../../source/simulation2/components/ICmpObstruction.h:21,
                 from ../../../source/simulation2/components/CCmpObstruction.cpp:20:
../../../source/simulation2/system/SimContext.h:23:7: note: forward declaration of ‘class CComponentManager’
   23 | class CComponentManager;
      |       ^~~~~~~~~~~~~~~~~
../../../source/simulation2/components/CCmpObstruction.cpp:51:3: error: invalid use of incomplete type ‘class CComponentManager’
   51 |   componentManager.SubscribeToMessageType(MT_Destroy);
      |   ^~~~~~~~~~~~~~~~
In file included from ../../../source/simulation2/system/IComponent.h:24,
                 from ../../../source/simulation2/system/Interface.h:21,
                 from ../../../source/simulation2/components/ICmpObstruction.h:21,
                 from ../../../source/simulation2/components/CCmpObstruction.cpp:20:
../../../source/simulation2/system/SimContext.h:23:7: note: forward declaration of ‘class CComponentManager’
   23 | class CComponentManager;
      |       ^~~~~~~~~~~~~~~~~
../../../source/simulation2/components/CCmpObstruction.cpp: In member function ‘virtual void CCmpObstruction::Init(const CParamNode&)’:
../../../source/simulation2/components/CCmpObstruction.cpp:199:7: error: invalid use of incomplete type ‘const class CParamNode’
  199 |   if (paramNode.GetChild("BlockMovement").ToBool())
      |       ^~~~~~~~~
In file included from ../../../source/simulation2/system/Interface.h:21,
                 from ../../../source/simulation2/components/ICmpObstruction.h:21,
                 from ../../../source/simulation2/components/CCmpObstruction.cpp:20:
../../../source/simulation2/system/IComponent.h:27:7: note: forward declaration of ‘class CParamNode’
   27 | class CParamNode;
      |       ^~~~~~~~~~
../../../source/simulation2/components/CCmpObstruction.cpp:201:7: error: invalid use of incomplete type ‘const class CParamNode’
  201 |   if (paramNode.GetChild("BlockPathfinding").ToBool())
      |       ^~~~~~~~~
In file included from ../../../source/simulation2/system/Interface.h:21,
                 from ../../../source/simulation2/components/ICmpObstruction.h:21,
                 from ../../../source/simulation2/components/CCmpObstruction.cpp:20:
../../../source/simulation2/system/IComponent.h:27:7: note: forward declaration of ‘class CParamNode’
   27 | class CParamNode;
      |       ^~~~~~~~~~
../../../source/simulation2/components/CCmpObstruction.cpp:203:7: error: invalid use of incomplete type ‘const class CParamNode’
  203 |   if (paramNode.GetChild("BlockFoundation").ToBool())
      |       ^~~~~~~~~
In file included from ../../../source/simulation2/system/Interface.h:21,
                 from ../../../source/simulation2/components/ICmpObstruction.h:21,
                 from ../../../source/simulation2/components/CCmpObstruction.cpp:20:
../../../source/simulation2/system/IComponent.h:27:7: note: forward declaration of ‘class CParamNode’
   27 | class CParamNode;
      |       ^~~~~~~~~~
../../../source/simulation2/components/CCmpObstruction.cpp:205:7: error: invalid use of incomplete type ‘const class CParamNode’
  205 |   if (paramNode.GetChild("BlockConstruction").ToBool())
      |       ^~~~~~~~~
In file included from ../../../source/simulation2/system/Interface.h:21,
                 from ../../../source/simulation2/components/ICmpObstruction.h:21,
                 from ../../../source/simulation2/components/CCmpObstruction.cpp:20:
../../../source/simulation2/system/IComponent.h:27:7: note: forward declaration of ‘class CParamNode’
   27 | class CParamNode;
      |       ^~~~~~~~~~
../../../source/simulation2/components/CCmpObstruction.cpp:207:7: error: invalid use of incomplete type ‘const class CParamNode’
  207 |   if (paramNode.GetChild("DeleteUponConstruction").ToBool())
      |       ^~~~~~~~~
In file included from ../../../source/simulation2/system/Interface.h:21,
                 from ../../../source/simulation2/components/ICmpObstruction.h:21,
                 from ../../../source/simulation2/components/CCmpObstruction.cpp:20:
../../../source/simulation2/system/IComponent.h:27:7: note: forward declaration of ‘class CParamNode’
   27 | class CParamNode;
      |       ^~~~~~~~~~
../../../source/simulation2/components/CCmpObstruction.cpp:211:7: error: invalid use of incomplete type ‘const class CParamNode’
  211 |   if (paramNode.GetChild("DisableBlockMovement").ToBool())
      |       ^~~~~~~~~
In file included from ../../../source/simulation2/system/Interface.h:21,
                 from ../../../source/simulation2/components/ICmpObstruction.h:21,
                 from ../../../source/simulation2/components/CCmpObstruction.cpp:20:
../../../source/simulation2/system/IComponent.h:27:7: note: forward declaration of ‘class CParamNode’
   27 | class CParamNode;
      |       ^~~~~~~~~~
../../../source/simulation2/components/CCmpObstruction.cpp:213:7: error: invalid use of incomplete type ‘const class CParamNode’
  213 |   if (paramNode.GetChild("DisableBlockPathfinding").ToBool())
      |       ^~~~~~~~~
In file included from ../../../source/simulation2/system/Interface.h:21,
                 from ../../../source/simulation2/components/ICmpObstruction.h:21,
                 from ../../../source/simulation2/components/CCmpObstruction.cpp:20:
../../../source/simulation2/system/IComponent.h:27:7: note: forward declaration of ‘class CParamNode’
   27 | class CParamNode;
      |       ^~~~~~~~~~
../../../source/simulation2/components/CCmpObstruction.cpp:216:7: error: invalid use of incomplete type ‘const class CParamNode’
  216 |   if (paramNode.GetChild("Unit").IsOk())
      |       ^~~~~~~~~
In file included from ../../../source/simulation2/system/Interface.h:21,
                 from ../../../source/simulation2/components/ICmpObstruction.h:21,
                 from ../../../source/simulation2/components/CCmpObstruction.cpp:20:
../../../source/simulation2/system/IComponent.h:27:7: note: forward declaration of ‘class CParamNode’
   27 | class CParamNode;
      |       ^~~~~~~~~~
../../../source/simulation2/components/CCmpObstruction.cpp:220:4: error: ‘CmpPtr’ was not declared in this scope
  220 |    CmpPtr<ICmpUnitMotion> cmpUnitMotion(GetEntityHandle());
      |    ^~~~~~
../../../source/simulation2/components/CCmpObstruction.cpp:220:25: error: expected primary-expression before ‘>’ token
  220 |    CmpPtr<ICmpUnitMotion> cmpUnitMotion(GetEntityHandle());
      |                         ^
../../../source/simulation2/components/CCmpObstruction.cpp:220:27: error: ‘cmpUnitMotion’ was not declared in this scope; did you mean ‘ICmpUnitMotion’?
  220 |    CmpPtr<ICmpUnitMotion> cmpUnitMotion(GetEntityHandle());
      |                           ^~~~~~~~~~~~~
      |                           ICmpUnitMotion
../../../source/simulation2/components/CCmpObstruction.cpp:224:12: error: invalid use of incomplete type ‘const class CParamNode’
  224 |   else if (paramNode.GetChild("Static").IsOk())
      |            ^~~~~~~~~
In file included from ../../../source/simulation2/system/Interface.h:21,
                 from ../../../source/simulation2/components/ICmpObstruction.h:21,
                 from ../../../source/simulation2/components/CCmpObstruction.cpp:20:
../../../source/simulation2/system/IComponent.h:27:7: note: forward declaration of ‘class CParamNode’
   27 | class CParamNode;
      |       ^~~~~~~~~~
../../../source/simulation2/components/CCmpObstruction.cpp:227:14: error: invalid use of incomplete type ‘const class CParamNode’
  227 |    m_Size0 = paramNode.GetChild("Static").GetChild("@width").ToFixed();
      |              ^~~~~~~~~
In file included from ../../../source/simulation2/system/Interface.h:21,
                 from ../../../source/simulation2/components/ICmpObstruction.h:21,
                 from ../../../source/simulation2/components/CCmpObstruction.cpp:20:
../../../source/simulation2/system/IComponent.h:27:7: note: forward declaration of ‘class CParamNode’
   27 | class CParamNode;
      |       ^~~~~~~~~~
../../../source/simulation2/components/CCmpObstruction.cpp:228:14: error: invalid use of incomplete type ‘const class CParamNode’
  228 |    m_Size1 = paramNode.GetChild("Static").GetChild("@depth").ToFixed();
      |              ^~~~~~~~~
In file included from ../../../source/simulation2/system/Interface.h:21,
                 from ../../../source/simulation2/components/ICmpObstruction.h:21,
                 from ../../../source/simulation2/components/CCmpObstruction.cpp:20:
../../../source/simulation2/system/IComponent.h:27:7: note: forward declaration of ‘class CParamNode’
   27 | class CParamNode;
      |       ^~~~~~~~~~
../../../source/simulation2/components/CCmpObstruction.cpp:237:22: error: invalid use of incomplete type ‘class CParamNode’
  237 |    const CParamNode::ChildrenMap& clusterMap = paramNode.GetChild("Obstructions").GetChildren();
      |                      ^~~~~~~~~~~
In file included from ../../../source/simulation2/system/Interface.h:21,
                 from ../../../source/simulation2/components/ICmpObstruction.h:21,
                 from ../../../source/simulation2/components/CCmpObstruction.cpp:20:
../../../source/simulation2/system/IComponent.h:27:7: note: forward declaration of ‘class CParamNode’
   27 | class CParamNode;
      |       ^~~~~~~~~~
../../../source/simulation2/components/CCmpObstruction.cpp:238:20: error: ‘CParamNode::ChildrenMap’ has not been declared
  238 |    for(CParamNode::ChildrenMap::const_iterator it = clusterMap.begin(); it != clusterMap.end(); ++it)
      |                    ^~~~~~~~~~~
../../../source/simulation2/components/CCmpObstruction.cpp:238:73: error: ‘it’ was not declared in this scope; did you mean ‘i8’?
  238 |    for(CParamNode::ChildrenMap::const_iterator it = clusterMap.begin(); it != clusterMap.end(); ++it)
      |                                                                         ^~
      |                                                                         i8
../../../source/simulation2/components/CCmpObstruction.cpp:238:79: error: ‘clusterMap’ was not declared in this scope
  238 |    for(CParamNode::ChildrenMap::const_iterator it = clusterMap.begin(); it != clusterMap.end(); ++it)
      |                                                                               ^~~~~~~~~~
../../../source/simulation2/components/CCmpObstruction.cpp:259:14: error: invalid use of incomplete type ‘const class CParamNode’
  259 |   m_Active = paramNode.GetChild("Active").ToBool();
      |              ^~~~~~~~~
In file included from ../../../source/simulation2/system/Interface.h:21,
                 from ../../../source/simulation2/components/ICmpObstruction.h:21,
                 from ../../../source/simulation2/components/CCmpObstruction.cpp:20:
../../../source/simulation2/system/IComponent.h:27:7: note: forward declaration of ‘class CParamNode’
   27 | class CParamNode;
      |       ^~~~~~~~~~
../../../source/simulation2/components/CCmpObstruction.cpp:260:22: error: invalid use of incomplete type ‘const class CParamNode’
  260 |   m_ControlPersist = paramNode.GetChild("ControlPersist").IsOk();
      |                      ^~~~~~~~~
In file included from ../../../source/simulation2/system/Interface.h:21,
                 from ../../../source/simulation2/components/ICmpObstruction.h:21,
                 from ../../../source/simulation2/components/CCmpObstruction.cpp:20:
../../../source/simulation2/system/IComponent.h:27:7: note: forward declaration of ‘class CParamNode’
   27 | class CParamNode;
      |       ^~~~~~~~~~
../../../source/simulation2/components/CCmpObstruction.cpp: In member function ‘virtual void CCmpObstruction::HandleMessage(const CMessage&, bool)’:
../../../source/simulation2/components/CCmpObstruction.cpp:315:4: error: ‘CmpPtr’ was not declared in this scope
  315 |    CmpPtr<ICmpObstructionManager> cmpObstructionManager(GetSystemEntity());
      |    ^~~~~~
../../../source/simulation2/components/CCmpObstruction.cpp:315:33: error: expected primary-expression before ‘>’ token
  315 |    CmpPtr<ICmpObstructionManager> cmpObstructionManager(GetSystemEntity());
      |                                 ^
../../../source/simulation2/components/CCmpObstruction.cpp:315:35: error: ‘cmpObstructionManager’ was not declared in this scope; did you mean ‘ICmpObstructionManager’?
  315 |    CmpPtr<ICmpObstructionManager> cmpObstructionManager(GetSystemEntity());
      |                                   ^~~~~~~~~~~~~~~~~~~~~
      |                                   ICmpObstructionManager
../../../source/simulation2/components/CCmpObstruction.cpp:359:5: error: ‘CmpPtr’ was not declared in this scope
  359 |     CmpPtr<ICmpObstructionManager> cmpObstructionManager(GetSystemEntity());
      |     ^~~~~~
../../../source/simulation2/components/CCmpObstruction.cpp:359:34: error: expected primary-expression before ‘>’ token
  359 |     CmpPtr<ICmpObstructionManager> cmpObstructionManager(GetSystemEntity());
      |                                  ^
../../../source/simulation2/components/CCmpObstruction.cpp:359:36: error: ‘cmpObstructionManager’ was not declared in this scope; did you mean ‘ICmpObstructionManager’?
  359 |     CmpPtr<ICmpObstructionManager> cmpObstructionManager(GetSystemEntity());
      |                                    ^~~~~~~~~~~~~~~~~~~~~
      |                                    ICmpObstructionManager
../../../source/simulation2/components/CCmpObstruction.cpp: In member function ‘virtual void CCmpObstruction::SetActive(bool)’:
../../../source/simulation2/components/CCmpObstruction.cpp:383:4: error: ‘CmpPtr’ was not declared in this scope
  383 |    CmpPtr<ICmpObstructionManager> cmpObstructionManager(GetSystemEntity());
      |    ^~~~~~
../../../source/simulation2/components/CCmpObstruction.cpp:383:33: error: expected primary-expression before ‘>’ token
  383 |    CmpPtr<ICmpObstructionManager> cmpObstructionManager(GetSystemEntity());
      |                                 ^
../../../source/simulation2/components/CCmpObstruction.cpp:383:35: error: ‘cmpObstructionManager’ was not declared in this scope; did you mean ‘ICmpObstructionManager’?
  383 |    CmpPtr<ICmpObstructionManager> cmpObstructionManager(GetSystemEntity());
      |                                   ^~~~~~~~~~~~~~~~~~~~~
      |                                   ICmpObstructionManager
../../../source/simulation2/components/CCmpObstruction.cpp:387:23: error: expected primary-expression before ‘>’ token
  387 |    CmpPtr<ICmpPosition> cmpPosition(GetEntityHandle());
      |                       ^
../../../source/simulation2/components/CCmpObstruction.cpp:387:25: error: ‘cmpPosition’ was not declared in this scope; did you mean ‘ICmpPosition’?
  387 |    CmpPtr<ICmpPosition> cmpPosition(GetEntityHandle());
      |                         ^~~~~~~~~~~
      |                         ICmpPosition
../../../source/simulation2/components/CCmpObstruction.cpp:414:5: error: ‘CmpPtr’ was not declared in this scope
  414 |     CmpPtr<ICmpObstructionManager> cmpObstructionManager(GetSystemEntity());
      |     ^~~~~~
../../../source/simulation2/components/CCmpObstruction.cpp:414:34: error: expected primary-expression before ‘>’ token
  414 |     CmpPtr<ICmpObstructionManager> cmpObstructionManager(GetSystemEntity());
      |                                  ^
../../../source/simulation2/components/CCmpObstruction.cpp:414:36: error: ‘cmpObstructionManager’ was not declared in this scope; did you mean ‘ICmpObstructionManager’?
  414 |     CmpPtr<ICmpObstructionManager> cmpObstructionManager(GetSystemEntity());
      |                                    ^~~~~~~~~~~~~~~~~~~~~
      |                                    ICmpObstructionManager
../../../source/simulation2/components/CCmpObstruction.cpp: In member function ‘virtual bool CCmpObstruction::GetObstructionSquare(ICmpObstructionManager::ObstructionSquare&, bool) const’:
../../../source/simulation2/components/CCmpObstruction.cpp:484:3: error: ‘CmpPtr’ was not declared in this scope
  484 |   CmpPtr<ICmpPosition> cmpPosition(GetEntityHandle());
      |   ^~~~~~
../../../source/simulation2/components/CCmpObstruction.cpp:484:22: error: expected primary-expression before ‘>’ token
  484 |   CmpPtr<ICmpPosition> cmpPosition(GetEntityHandle());
      |                      ^
../../../source/simulation2/components/CCmpObstruction.cpp:484:24: error: ‘cmpPosition’ was not declared in this scope; did you mean ‘ICmpPosition’?
  484 |   CmpPtr<ICmpPosition> cmpPosition(GetEntityHandle());
      |                        ^~~~~~~~~~~
      |                        ICmpPosition
../../../source/simulation2/components/CCmpObstruction.cpp:488:32: error: expected primary-expression before ‘>’ token
  488 |   CmpPtr<ICmpObstructionManager> cmpObstructionManager(GetSystemEntity());
      |                                ^
../../../source/simulation2/components/CCmpObstruction.cpp:488:34: error: ‘cmpObstructionManager’ was not declared in this scope; did you mean ‘ICmpObstructionManager’?
  488 |   CmpPtr<ICmpObstructionManager> cmpObstructionManager(GetSystemEntity());
      |                                  ^~~~~~~~~~~~~~~~~~~~~
      |                                  ICmpObstructionManager
../../../source/simulation2/components/CCmpObstruction.cpp: In member function ‘virtual bool CCmpObstruction::CheckShorePlacement() const’:
../../../source/simulation2/components/CCmpObstruction.cpp:540:3: error: ‘CmpPtr’ was not declared in this scope
  540 |   CmpPtr<ICmpTerrain> cmpTerrain(GetSystemEntity());
      |   ^~~~~~
../../../source/simulation2/components/CCmpObstruction.cpp:540:21: error: expected primary-expression before ‘>’ token
  540 |   CmpPtr<ICmpTerrain> cmpTerrain(GetSystemEntity());
      |                     ^
../../../source/simulation2/components/CCmpObstruction.cpp:540:23: error: ‘cmpTerrain’ was not declared in this scope; did you mean ‘ICmpTerrain’?
  540 |   CmpPtr<ICmpTerrain> cmpTerrain(GetSystemEntity());
      |                       ^~~~~~~~~~
      |                       ICmpTerrain
../../../source/simulation2/components/CCmpObstruction.cpp:541:26: error: expected primary-expression before ‘>’ token
  541 |   CmpPtr<ICmpWaterManager> cmpWaterManager(GetSystemEntity());
      |                          ^
../../../source/simulation2/components/CCmpObstruction.cpp:541:28: error: ‘cmpWaterManager’ was not declared in this scope; did you mean ‘ICmpWaterManager’?
  541 |   CmpPtr<ICmpWaterManager> cmpWaterManager(GetSystemEntity());
      |                            ^~~~~~~~~~~~~~~
      |                            ICmpWaterManager
../../../source/simulation2/components/CCmpObstruction.cpp: In member function ‘virtual ICmpObstruction::EFoundationCheck CCmpObstruction::CheckFoundation(const string&, bool) const’:
../../../source/simulation2/components/CCmpObstruction.cpp:557:3: error: ‘CmpPtr’ was not declared in this scope
  557 |   CmpPtr<ICmpPosition> cmpPosition(GetEntityHandle());
      |   ^~~~~~
../../../source/simulation2/components/CCmpObstruction.cpp:557:22: error: expected primary-expression before ‘>’ token
  557 |   CmpPtr<ICmpPosition> cmpPosition(GetEntityHandle());
      |                      ^
../../../source/simulation2/components/CCmpObstruction.cpp:557:24: error: ‘cmpPosition’ was not declared in this scope; did you mean ‘ICmpPosition’?
  557 |   CmpPtr<ICmpPosition> cmpPosition(GetEntityHandle());
      |                        ^~~~~~~~~~~
      |                        ICmpPosition
../../../source/simulation2/components/CCmpObstruction.cpp:566:24: error: expected primary-expression before ‘>’ token
  566 |   CmpPtr<ICmpPathfinder> cmpPathfinder(GetSystemEntity());
      |                        ^
../../../source/simulation2/components/CCmpObstruction.cpp:566:26: error: ‘cmpPathfinder’ was not declared in this scope; did you mean ‘ICmpPathfinder’?
  566 |   CmpPtr<ICmpPathfinder> cmpPathfinder(GetSystemEntity());
      |                          ^~~~~~~~~~~~~
      |                          ICmpPathfinder
../../../source/simulation2/components/CCmpObstruction.cpp: In member function ‘virtual bool CCmpObstruction::CheckDuplicateFoundation() const’:
../../../source/simulation2/components/CCmpObstruction.cpp:594:3: error: ‘CmpPtr’ was not declared in this scope
  594 |   CmpPtr<ICmpPosition> cmpPosition(GetEntityHandle());
      |   ^~~~~~
../../../source/simulation2/components/CCmpObstruction.cpp:594:22: error: expected primary-expression before ‘>’ token
  594 |   CmpPtr<ICmpPosition> cmpPosition(GetEntityHandle());
      |                      ^
../../../source/simulation2/components/CCmpObstruction.cpp:594:24: error: ‘cmpPosition’ was not declared in this scope; did you mean ‘ICmpPosition’?
  594 |   CmpPtr<ICmpPosition> cmpPosition(GetEntityHandle());
      |                        ^~~~~~~~~~~
      |                        ICmpPosition
../../../source/simulation2/components/CCmpObstruction.cpp:603:32: error: expected primary-expression before ‘>’ token
  603 |   CmpPtr<ICmpObstructionManager> cmpObstructionManager(GetSystemEntity());
      |                                ^
../../../source/simulation2/components/CCmpObstruction.cpp:603:34: error: ‘cmpObstructionManager’ was not declared in this scope; did you mean ‘ICmpObstructionManager’?
  603 |   CmpPtr<ICmpObstructionManager> cmpObstructionManager(GetSystemEntity());
      |                                  ^~~~~~~~~~~~~~~~~~~~~
      |                                  ICmpObstructionManager
../../../source/simulation2/components/CCmpObstruction.cpp: In member function ‘virtual std::vector<unsigned int> CCmpObstruction::GetEntitiesByFlags(CCmpObstruction::flags_t) const’:
../../../source/simulation2/components/CCmpObstruction.cpp:628:3: error: ‘CmpPtr’ was not declared in this scope
  628 |   CmpPtr<ICmpObstructionManager> cmpObstructionManager(GetSystemEntity());
      |   ^~~~~~
../../../source/simulation2/components/CCmpObstruction.cpp:628:32: error: expected primary-expression before ‘>’ token
  628 |   CmpPtr<ICmpObstructionManager> cmpObstructionManager(GetSystemEntity());
      |                                ^
../../../source/simulation2/components/CCmpObstruction.cpp:628:34: error: ‘cmpObstructionManager’ was not declared in this scope; did you mean ‘ICmpObstructionManager’?
  628 |   CmpPtr<ICmpObstructionManager> cmpObstructionManager(GetSystemEntity());
      |                                  ^~~~~~~~~~~~~~~~~~~~~
      |                                  ICmpObstructionManager
../../../source/simulation2/components/CCmpObstruction.cpp: In member function ‘virtual void CCmpObstruction::SetMovingFlag(bool)’:
../../../source/simulation2/components/CCmpObstruction.cpp:668:4: error: ‘CmpPtr’ was not declared in this scope
  668 |    CmpPtr<ICmpObstructionManager> cmpObstructionManager(GetSystemEntity());
      |    ^~~~~~
../../../source/simulation2/components/CCmpObstruction.cpp:668:33: error: expected primary-expression before ‘>’ token
  668 |    CmpPtr<ICmpObstructionManager> cmpObstructionManager(GetSystemEntity());
      |                                 ^
../../../source/simulation2/components/CCmpObstruction.cpp:668:35: error: ‘cmpObstructionManager’ was not declared in this scope; did you mean ‘ICmpObstructionManager’?
  668 |    CmpPtr<ICmpObstructionManager> cmpObstructionManager(GetSystemEntity());
      |                                   ^~~~~~~~~~~~~~~~~~~~~
      |                                   ICmpObstructionManager
../../../source/simulation2/components/CCmpObstruction.cpp: In member function ‘void CCmpObstruction::UpdateControlGroups()’:
../../../source/simulation2/components/CCmpObstruction.cpp:700:4: error: ‘CmpPtr’ was not declared in this scope
  700 |    CmpPtr<ICmpObstructionManager> cmpObstructionManager(GetSystemEntity());
      |    ^~~~~~
../../../source/simulation2/components/CCmpObstruction.cpp:700:33: error: expected primary-expression before ‘>’ token
  700 |    CmpPtr<ICmpObstructionManager> cmpObstructionManager(GetSystemEntity());
      |                                 ^
../../../source/simulation2/components/CCmpObstruction.cpp:700:35: error: ‘cmpObstructionManager’ was not declared in this scope; did you mean ‘ICmpObstructionManager’?
  700 |    CmpPtr<ICmpObstructionManager> cmpObstructionManager(GetSystemEntity());
      |                                   ^~~~~~~~~~~~~~~~~~~~~
      |                                   ICmpObstructionManager
../../../source/simulation2/components/CCmpObstruction.cpp: In member function ‘virtual void CCmpObstruction::ResolveFoundationCollisions() const’:
../../../source/simulation2/components/CCmpObstruction.cpp:728:3: error: ‘CmpPtr’ was not declared in this scope
  728 |   CmpPtr<ICmpObstructionManager> cmpObstructionManager(GetSystemEntity());
      |   ^~~~~~
../../../source/simulation2/components/CCmpObstruction.cpp:728:32: error: expected primary-expression before ‘>’ token
  728 |   CmpPtr<ICmpObstructionManager> cmpObstructionManager(GetSystemEntity());
      |                                ^
../../../source/simulation2/components/CCmpObstruction.cpp:728:34: error: ‘cmpObstructionManager’ was not declared in this scope; did you mean ‘ICmpObstructionManager’?
  728 |   CmpPtr<ICmpObstructionManager> cmpObstructionManager(GetSystemEntity());
      |                                  ^~~~~~~~~~~~~~~~~~~~~
      |                                  ICmpObstructionManager
../../../source/simulation2/components/CCmpObstruction.cpp:732:22: error: expected primary-expression before ‘>’ token
  732 |   CmpPtr<ICmpPosition> cmpPosition(GetEntityHandle());
      |                      ^
../../../source/simulation2/components/CCmpObstruction.cpp:732:24: error: ‘cmpPosition’ was not declared in this scope; did you mean ‘ICmpPosition’?
  732 |   CmpPtr<ICmpPosition> cmpPosition(GetEntityHandle());
      |                        ^~~~~~~~~~~
      |                        ICmpPosition
../../../source/simulation2/components/CCmpObstruction.cpp:763:27: error: expected primary-expression before ‘>’ token
  763 |     CmpPtr<ICmpObstruction> cmpObstruction(GetSimContext(), ent);
      |                           ^
../../../source/simulation2/components/CCmpObstruction.cpp:763:29: error: ‘cmpObstruction’ was not declared in this scope; did you mean ‘CCmpObstruction’?
  763 |     CmpPtr<ICmpObstruction> cmpObstruction(GetSimContext(), ent);
      |                             ^~~~~~~~~~~~~~
      |                             CCmpObstruction
../../../source/simulation2/components/CCmpObstruction.cpp:777:27: error: expected primary-expression before ‘>’ token
  777 |     CmpPtr<ICmpObstruction> cmpObstruction(GetSimContext(), normalEnt);
      |                           ^
../../../source/simulation2/components/CCmpObstruction.cpp:777:29: error: ‘cmpObstruction’ was not declared in this scope; did you mean ‘CCmpObstruction’?
  777 |     CmpPtr<ICmpObstruction> cmpObstruction(GetSimContext(), normalEnt);
      |                             ^~~~~~~~~~~~~~
      |                             CCmpObstruction
../../../source/simulation2/components/CCmpObstruction.cpp: In member function ‘void CCmpObstruction::AddClusterShapes(entity_pos_t, entity_pos_t, entity_angle_t)’:
../../../source/simulation2/components/CCmpObstruction.cpp:795:3: error: ‘CmpPtr’ was not declared in this scope
  795 |   CmpPtr<ICmpObstructionManager> cmpObstructionManager(GetSystemEntity());
      |   ^~~~~~
../../../source/simulation2/components/CCmpObstruction.cpp:795:32: error: expected primary-expression before ‘>’ token
  795 |   CmpPtr<ICmpObstructionManager> cmpObstructionManager(GetSystemEntity());
      |                                ^
../../../source/simulation2/components/CCmpObstruction.cpp:795:34: error: ‘cmpObstructionManager’ was not declared in this scope; did you mean ‘ICmpObstructionManager’?
  795 |   CmpPtr<ICmpObstructionManager> cmpObstructionManager(GetSystemEntity());
      |                                  ^~~~~~~~~~~~~~~~~~~~~
      |                                  ICmpObstructionManager
../../../source/simulation2/components/CCmpObstruction.cpp: In member function ‘void CCmpObstruction::RemoveClusterShapes()’:
../../../source/simulation2/components/CCmpObstruction.cpp:821:3: error: ‘CmpPtr’ was not declared in this scope
  821 |   CmpPtr<ICmpObstructionManager> cmpObstructionManager(GetSystemEntity());
      |   ^~~~~~
../../../source/simulation2/components/CCmpObstruction.cpp:821:32: error: expected primary-expression before ‘>’ token
  821 |   CmpPtr<ICmpObstructionManager> cmpObstructionManager(GetSystemEntity());
      |                                ^
../../../source/simulation2/components/CCmpObstruction.cpp:821:34: error: ‘cmpObstructionManager’ was not declared in this scope; did you mean ‘ICmpObstructionManager’?
  821 |   CmpPtr<ICmpObstructionManager> cmpObstructionManager(GetSystemEntity());
      |                                  ^~~~~~~~~~~~~~~~~~~~~
      |                                  ICmpObstructionManager
../../../source/simulation2/components/CCmpObstruction.cpp: At global scope:
../../../source/simulation2/components/CCmpObstruction.cpp:837:24: error: expected constructor, destructor, or type conversion before ‘(’ token
  837 | REGISTER_COMPONENT_TYPE(Obstruction)
      |                        ^
CCmpTemplateManager.cpp
x86_64-pc-linux-gnu-g++ -march=native -O2 -pipe -Wall  -DNDEBUG -MMD -MP -DNDEBUG -DCONFIG_FINAL=1 -DLIB_STATIC_LINK -DINSTALLED_BINDIR=/usr/bin -DINSTALLED_DATADIR=/usr/share/0ad -DINSTALLED_LIBDIR=/usr/lib64/0ad -DCONFIG_ENABLE_PCH=0 -I../../../source/pch/simulation2 -I../../../source -isystem /usr/include/nspr -fno-rtti -std=c++17 -fvisibility=hidden -isystem /usr/include/mozjs-78 -include /usr/include/mozjs-78/js/RequiredDefines.h -o "obj/simulation2_Release/CCmpTemplateManager.o" -MF "obj/simulation2_Release/CCmpTemplateManager.d" -c "../../../source/simulation2/components/CCmpTemplateManager.cpp"
../../../source/simulation2/components/CCmpTemplateManager.cpp:38:30: error: ‘TemplateManager’ has not been declared
   38 |  DEFAULT_COMPONENT_ALLOCATOR(TemplateManager)
      |                              ^~~~~~~~~~~~~~~
../../../source/simulation2/components/CCmpTemplateManager.cpp:38:2: error: ISO C++ forbids declaration of ‘DEFAULT_COMPONENT_ALLOCATOR’ with no type [-fpermissive]
   38 |  DEFAULT_COMPONENT_ALLOCATOR(TemplateManager)
      |  ^~~~~~~~~~~~~~~~~~~~~~~~~~~
../../../source/simulation2/components/CCmpTemplateManager.cpp:38:45: error: expected ‘;’ at end of member declaration
   38 |  DEFAULT_COMPONENT_ALLOCATOR(TemplateManager)
      |                                             ^
      |                                              ;
../../../source/simulation2/components/CCmpTemplateManager.cpp: In static member function ‘static void CCmpTemplateManager::ClassInit(CComponentManager&)’:
../../../source/simulation2/components/CCmpTemplateManager.cpp:35:3: error: invalid use of incomplete type ‘class CComponentManager’
   35 |   componentManager.SubscribeGloballyToMessageType(MT_Destroy);
      |   ^~~~~~~~~~~~~~~~
In file included from ../../../source/simulation2/system/IComponent.h:24,
                 from ../../../source/simulation2/system/Interface.h:21,
                 from ../../../source/simulation2/components/ICmpTemplateManager.h:21,
                 from ../../../source/simulation2/components/CCmpTemplateManager.cpp:20:
../../../source/simulation2/system/SimContext.h:23:7: note: forward declaration of ‘class CComponentManager’
   23 | class CComponentManager;
      |       ^~~~~~~~~~~~~~~~~
../../../source/simulation2/components/CCmpTemplateManager.cpp: In member function ‘virtual void CCmpTemplateManager::Init(const CParamNode&)’:
../../../source/simulation2/components/CCmpTemplateManager.cpp:49:62: error: invalid use of incomplete type ‘class CComponentManager’
   49 |   m_Validator.LoadGrammar(GetSimContext().GetComponentManager().GenerateSchema());
      |                           ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^~
In file included from ../../../source/simulation2/system/IComponent.h:24,
                 from ../../../source/simulation2/system/Interface.h:21,
                 from ../../../source/simulation2/components/ICmpTemplateManager.h:21,
                 from ../../../source/simulation2/components/CCmpTemplateManager.cpp:20:
../../../source/simulation2/system/SimContext.h:23:7: note: forward declaration of ‘class CComponentManager’
   23 | class CComponentManager;
      |       ^~~~~~~~~~~~~~~~~
../../../source/simulation2/components/CCmpTemplateManager.cpp: At global scope:
../../../source/simulation2/components/CCmpTemplateManager.cpp:139:24: error: expected constructor, destructor, or type conversion before ‘(’ token
  139 | REGISTER_COMPONENT_TYPE(TemplateManager)
      |                        ^

Both of these files include pch/simulation2/precompiled.h, which contains:

#if CONFIG_ENABLE_PCH
...
#include "simulation2/system/Component.h"
...
#endif // CONFIG_ENABLE_PCH

And simulation2/system/Component.h defines DEFAULT_COMPONENT_ALLOCATOR macro used in these .cpp files:

#define DEFAULT_COMPONENT_ALLOCATOR(cname) \
        static IComponent* Allocate(const ScriptInterface&, JS::HandleValue) { return new CCmp##cname(); } \
        static void Deallocate(IComponent* cmp) { delete static_cast<CCmp##cname*> (cmp); } \
        virtual int GetComponentTypeId() const \
        { \
                return CID_##cname; \
        }

So explicit #include "simulation2/system/Component.h" is needed in these .cpp files:

--- source/simulation2/components/CCmpObstruction.cpp
+++ source/simulation2/components/CCmpObstruction.cpp
@@ -17,6 +17,7 @@
 
 #include "precompiled.h"
 
+#include "simulation2/system/Component.h"
 #include "ICmpObstruction.h"
 
 #include "simulation2/MessageTypes.h"
--- source/simulation2/components/CCmpTemplateManager.cpp
+++ source/simulation2/components/CCmpTemplateManager.cpp
@@ -17,6 +17,7 @@
 
 #include "precompiled.h"
 
+#include "simulation2/system/Component.h"
 #include "ICmpTemplateManager.h"
 
 #include "simulation2/MessageTypes.h"

grep -r '#include "simulation2/system/Component.h"' * shows that this header is explicitly included in many other .cpp files.

Change History (2)

comment:1 by Silier, 3 years ago

Component: SimulationCore engine

comment:2 by wraitii, 3 years ago

Owner: set to wraitii
Resolution: fixed
Status: newclosed

In 24454:

Fix no-pch builds following rP24427

Component.h is loaded by convention in all CmpComponents and is requireed to use CmpPtr.

Fixes #5898

Differential Revision: https://code.wildfiregames.com/D3259

Note: See TracTickets for help on using tickets.