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 , 3 years ago
Component: | Simulation → Core engine |
---|
comment:2 by , 3 years ago
Owner: | set to |
---|---|
Resolution: | → fixed |
Status: | new → closed |
Note:
See TracTickets
for help on using tickets.
In 24454: