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?