Reputation: 349
I'm getting an undeclared identifier error and I don't know why. I even rewrote the complete stuff to make sure I didn't do a typo. Can someone tell me why I got this error?
My files are
Connection.hpp
#pragma once
#include "../LogicSimulator.hpp"
#include "CircuitObject.hpp"
class Connection
{
public:
Connection(CircuitObject& c1, CircuitObject& c2, LogicSimulator&
simulator);
private:
int state;
CircuitObject& c1;
CircuitObject& c2;
LogicSimulator& simulator;
};
Don't mind the CircuitObjects
, they don't give out any errors, errors are: undeclared 'LogicSimulator'
Connection.cpp
#pragma once
#include "Connection.hpp"
#include "../LogicSimulator.hpp"
#include "CircuitObject.hpp"
Connection::Connection(CircuitObject& c1, CircuitObject& c2, LogicSimulator&
simulator) : c1(c1), c2(c2), simulator(simulator)
{
state = c1.State;
}
Errors: undeclared 'LogicSimulator'
LogicSimulator.hpp
#pragma once
#include "Simulator\CircuitObject.hpp"
#include "Simulator\Connection.hpp"
#include <SFML\Graphics.hpp>
#include <vector>
class LogicSimulator
{
public:
std::vector<CircuitObject*> circuitObjects;
std::vector<CircuitObject*> selectedCircuitObjects;
std::vector<Connection*> connections;
sf::RenderWindow Window;
void Init();
private:
void start();
void draw();
};
Don't mind LogicSimulator.cpp, it doesn't give out any errors.
Errors: undeclared 'Connection' (Yeah, and in Connection LogicSimulator is undeclared)
Upvotes: 1
Views: 4828
Reputation: 14269
This is, as I wrote in the comments, most likely caused by your circular includes. Connection.hpp
includes LogicSimulator.hpp
which itself includes Connection.hpp
.
In your case, you don't even need the includes. For Pointers and References, a forward declaration is fine:
Connection.hpp:
#pragma once
class CircuitObject;
class LogicSimulator;
class Connection
{
public:
Connection(CircuitObject& c1, CircuitObject& c2, LogicSimulator&
simulator);
private:
int state;
CircuitObject& c1;
CircuitObject& c2;
LogicSimulator& simulator;
};
LogicSimulator.hpp:
#pragma once
#include <SFML\Graphics.hpp>
#include <vector>
class CircuitObject;
class Connection;
class LogicSimulator
{
public:
std::vector<CircuitObject*> circuitObjects;
std::vector<CircuitObject*> selectedCircuitObjects;
std::vector<Connection*> connections;
sf::RenderWindow Window;
void Init();
private:
void start();
void draw();
};
Upvotes: 2