简体   繁体   中英

C++ undeclared identifier error

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)

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();
};

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM