0

I've been getting a strange error in Visual Studio 2017. The error is

Error C3646 'collisionSys': unknown override specifier
Error C4430 missing type specifier - int assumed. Note: C++ does not support default-int

The strange thing about it is that when I build the solution, I get this error but when I delete the declaration of collisionSys and build, then re-declare collisionSys and build again, it succeeds. Though it happens again when I make some changes in CollisionSystem.hpp
My code is as follows:

CollisionSystem.hpp

 #ifndef COLLISION_SYSTEM__HPP
    #define COLLISION_SYSTEM__HPP

    #include <iostream>
    #include <vector>
    #include <SFML/Graphics.hpp>
    #include "../EntityManager.hpp"
    #include "../Entity.hpp"
    #include "../Components/Display.hpp"
    #include "../Components/Flags.hpp"
    #include "../Components/Movement.hpp"
    #include <Level.hpp>

    class Level;

    class CollisionSystem
    {
    public:
        CollisionSystem();
        void run(Level&, CameraSystem*, EntityManager*);
    private:
        static std::vector<std::shared_ptr<Entity>> m_Ents;
    };
#endif

CollisionSystem.cpp

#include <Systems/CollisionSystem.hpp>

std::vector<std::shared_ptr<Entity>> CollisionSystem::m_Ents;

CollisionSystem::CollisionSystem()
{

}

void CollisionSystem::run(Level& level, CameraSystem* cameraSys, 
EntityManager* EntMan)
{
    // Some collision detection here
}

LocalWorld.hpp

#ifndef LOCAL_WORLD__HPP
#define LOCAL_WORLD__HPP

#include <iostream>
#include <map>
#include <conio.h>
#include "GameState.hpp"
#include "StateMgr.hpp"
#include "Game.hpp" 
#include "TileMap.hpp"
#include "Level.hpp"
#include "ECS/Entity.hpp"
#include "ECS/Components/IncludeAllComponents.hpp"
#include "ECS/ResourceManager.hpp"
#include "ECS/EntityManager.hpp"
#include "ECS/Systems/IncludeAllSystems.hpp"

// Map Names
enum class MapName
{
    Map1
};

// Forward declaration
class Level;

class LocalWorld : public GameState
{
public:
    LocalWorld();
    ~LocalWorld();

    virtual void Pause();
    virtual void Resume();

    virtual void HandleEvents(sf::Event& eType);
    virtual void Update();
    virtual void Draw();
private:
    std::map<MapName, Level*> Maps;
    Level* activeLevel;

    ResourceManager ResMan;
    EntityManager EntMan;

    CameraSystem cameraSys;
    MovementSystem movementSys;
    ControlSystem controlSys;
    RenderSystem renderSys;
    CollisionSystem collisionSys;
};

#endif

The error is on line CollisionSystem collisionSys; in LocalWorld.hpp

IncludeAllSystems.hpp

#ifndef INCLUDE_ALL_SYSTEMS__HPP
#define INCLUDE_ALL_SYSTEMS__HPP

#include "CameraSystem.hpp"
#include "ControlSystem.hpp"
#include "MovementSystem.hpp"
#include "RenderSystem.hpp"
#include "CollisionSystem.hpp"

#endif

Here, this file includes all the Systems with CollisionSystem.hpp I looked at other questions with the same error but still can't fix it.

EDIT:

The error is fixed by moving #include <Level.hpp> from CollisionSystem.hpp to CollisionSystem.cpp. Can anyone explain why is that so?

Se7eN
  • 548
  • 1
  • 7
  • 22

0 Answers0