error: 'Layer' was not declared in this scope



  • Hallo zusammen,

    ich hab in meiner Neuronen Klasse eine Methode die als Parameter einen vector vom Typ Layer bekommt (Zeile 23). Dafür habe ich auch die Layer.h eingebunden. Allerdings bekomme ich trotzdem die Fehlermeldung:
    line 23 error: 'Layer' was not declared in this scope

    Neuron.h:

    #ifndef NEURON_H
    #define NEURON_H
    
    #include <vector>
    #include "Layer.h"
    
    using namespace std;
    
    class Neuron
    {
    
    private:
        double state;
        double inputSum;    //Summer aller Inputs
        vector< vector<int> > inputPosition;  //Die Adresse des Senders [Nummer des Inputs, 0] = Layer; [Nummer des Inputs, 1] = Position;
        vector<double> weight;  //Das dazugehörige weight
    
    public:
        Neuron();
        void addInput(const vector<int> &senderID);
        void getInputs(const vector<Layer> &layers);
    
        //Debug
        void printInfo(int layer, int position);
    };
    
    #endif // NEURON_H
    

    Ich hab mal ein bisschen im Internet rumgeschaut und keine Lösung gefunden die auf mein Problem zutrifft.
    Vielleicht ist es grad auch einfach nur zu spät und ich steh ein bisschen auf dem Schlauch 🙂 .

    Ich hoffe ihr könnt mir weiterhelfen.



  • Ohne die Layer Klasse zu kennen, wird dir hier wohl keiner was genaues sagen können.
    Vermutlich aber ein zirkulärer Include. Um das zu fixen entfernt man üblicherweiße den Include im Header, fügt ihn in der cpp ein und Forwarddeclariert im Header die benötigte Klasse.



  • Hier die Layer.h :

    #ifndef LAYER_H
    #define LAYER_H
    
    #include <vector>
    #include "Neuron.h"
    
    using namespace std;
    
    class Layer{
    
    private:
        vector<Neuron> neurons;
    
    public:
        Layer(int numberOfNeurons);
        void addConnection(const int &senderLayer, const int &senderPosition, const int &receiverPosition);
        int getNumberOfNeurons();
        void activateNeuronInputs(const vector<Layer> &layers);
    
        //Debug
        void printNeuronInfo(int layer, int position);
    };
    
    #endif // LAYER_H
    

  • Mod

    Zirkulare Abhängigkeit. Aber dein Neuron braucht gar nicht die vollständige Definition von Layer, eine Forward-Deklaration reicht auch.



  • Danke jetzt tuts.



  • Du hast nen zirkulären Include.


Anmelden zum Antworten