Pointer Prob



  • Hi

    ich hab ein kelienes Prob mit Pointer und komm total nicht weiter. Es gibt betsimmt eine Simple Lösung aber ich komm net drauf.

    Folgende Funktion in der Klasse:

    void Layer::MiddleLayer_erstellen(int Layerinhalt)
    {
    lange=Layerinhalt;
    
    neuronenpointer = new int * [lange-1];
    
    int i;
    for (i = 0; i < lange; i++)
    {   
    
        neuronenpointer[i-1]= new Neuronen;// Hier is die Ziele
    } 
    }
    

    Das hier is die .h datei der klasse.

    class Layer
    {
          private:
          int *neuronenpointer;
          int lange;
          public:
          void MiddleLayer_erstellen(int);
          void einlesen(double);
          void EingangsLayer_erstellen(int);
          void AusgangsLayer_erstellen(int);
    };
    

    variablen sind in der klasse definiert.

    Es kommt immer:
    15 C:\Proging\layer.cpp invalid conversion from `Neuronen*' to `int' die zeile ist beschriftet. Kann mir da einer helfen? ich will praktisch über nen pointer auf nen array mit pointer zugreifen. Geht das?

    MfG
    Eldarion



  • int **neuronenpointer;
    

    😉

    Und in deiner Schleife machst du was gefährliches, überleg mal was im ersten Durchlauf passiert...

    Edit: Achja vergessen. Dein Pointer zeigt auf int's doch du gibst ihm Neuronen, da kann ja was nicht stimmen...



  • hmm wie kann man das mit dem DAtentyp denn anders amchen?
    meisnt du bei der schleife das ich beim ersten durchlauf [-1] hab? wird i net schon beim ersten durchlauf um 1 erhöht?

    MfG
    eldarion



  • Ja, die Erhöhung findet nicht am Anfang statt !!!

    ? ich will praktisch über nen pointer auf nen array mit pointer zugreifen. Geht das?

    Wieso reicht nicht einfach ein:

    Neuronen* neuronenpointer; //statt int* neuronenpointer
    


  • class Layer
    {
          private:
          Neuronen *neuronenpointer;
          int lange;
          public:
          void MiddleLayer_erstellen(int);
          void einlesen(double);
          void EingangsLayer_erstellen(int);
          void AusgangsLayer_erstellen(int);
    };
    
    void Layer::MiddleLayer_erstellen(int Layerinhalt)
    {
    lange=Layerinhalt;
    
    neuronenpointer = new Neuronen [lange-1];
    }
    

    ODER:

    class Layer
    {
          private:
          Neuronen **neuronenpointer;
          int lange;
          public:
          void MiddleLayer_erstellen(int);
          void einlesen(double);
          void EingangsLayer_erstellen(int);
          void AusgangsLayer_erstellen(int);
    };
    
    void Layer::MiddleLayer_erstellen(int Layerinhalt)
    {
    lange=Layerinhalt;
    
    neuronenpointer = new Neuronen* [lange-1];
    
    for(int i=0;i<(laenge-1);++i)
         neuronenpointer[i] = new Neuronen;
    
    }
    

    Edit: Irgendwie alles heute voll durcheinander



  • Hi

    ich hab das prob gefunden. es lag daran, dasichd ie cpp datein und net die .h datein eingebunden hab.:D

    Das Prob hat sich verlüchitgt. jetzt tut aber was anders nich. Is total komisch, kann ich mir net erklärn.

    Hier ma der code:

    Verwaltung Verwaltungslayer;
    
    Verwaltungslayer.Aufbau_Array_erzeugen();
    cout<<"Verwaltung erzeugen";
    int Layeranzahl;
    
    Layeranzahl = sizeof(Verwaltungslayer.pointerausgeben());
    
    int* Layerinhalt;
    
    Layerinhalt = Verwaltungslayer.pointerausgeben();
    
    cout<< Verwaltungslayer.pointerausgeben();
    
    Layer** Layer_array_pointer = new Layer*[Layeranzahl];
    
    layererstellen(Layer_array_pointer, Layeranzahl, Layerinhalt);
    cout<<"Layer erstellen\n";
    int i;
    int Lange_array[sizeof(Layer_array_pointer)];
    cout <<"Langearray erstellt\n";
    
    for (i = 0; i < sizeof(Layer_array_pointer); i++)
    {
        Lange_array[i] =  Layer_array_pointer[i].laenge_ausgeben();
    }
    

    Hier die Layer.h

    #include "Neuronen.h"
    class Layer
    {
          private:
          Neuronen* neuronenpointer;
          int lange;
          public:
          void MiddleLayer_erstellen(int);
          void EingangsLayer_erstellen(int);
          void AusgangsLayer_erstellen(int);
          int laenge_ausgeben();
          Neuronen* pointer_ausgeben();
    };
    

    Und die Layer.cpp:

    #include <cstdlib>
    #include <iostream>
    #include "layer.h"
    #include "Neuronen.h"
    #include "Verwaltung.h"
    using namespace std;
    
    void Layer::MiddleLayer_erstellen(int Layerinhalt)
    {
    lange=Layerinhalt;
    neuronenpointer = new Neuronen [lange-1];
    }
    
    void Layer::EingangsLayer_erstellen(int Layerinhalt)
    {
    lange=Layerinhalt;
    neuronenpointer = new Neuronen [lange-1];
    }
    void Layer::AusgangsLayer_erstellen(int Layerinhalt)
    {
    lange=Layerinhalt;
    neuronenpointer = new Neuronen [lange-1];
    }
    int Layer::laenge_ausgeben()
    {
    return lange;
    }
    Neuronen* Layer::pointer_ausgeben()
    {
    return neuronenpointer;
    }
    

    Jetzt sagt er, das laenge_ausgeben nnicht deklariert ist:
    117 C:\Proging\main.cpp `laenge_ausgeben' has not been declared

    Auch ne andere Funktion aus der klasse wir nich erkannt. pointer_ausgeben. Slebes problem.

    Habt ihr evtl ne idee?

    MfG
    Eldairon



  • Hi

    sry für Doppelpost, aber kann mir dabei keiner helfen?
    Ich such jetz schon die ganze zeit nach dem fehler, find aber nichts.

    Könnt ihr mir helfen?

    MfG
    Eldarion



  • Hallo

    du hast ein Feld von Pointern, also must du die Pointer dereferenzieren, um auf die Instanzen zu kommen und deren Methoden zuzugreifen.

    Layer_array_pointer[i]->laenge_ausgeben()
    

    Desweiteren ist die Verwendung von sizeof auf die dynamischen Arrays sinnlos, denn sie liefern immer nur genau 4 (bei 32-bit).
    Du must dort stattdessen die echte größe angeben, die du auch zum Erstellen des Feldes verwendet hast.
    Vereinfachen läßt sich das übrigens durch den einsatz von std::vector

    bis bald
    akari



  • Hi

    jetzt funzt es. danke auch für den Tipp mit sizeof, da muss ich dan noch nen bissle was umbaun 🙂

    MfG
    Eldarion


Anmelden zum Antworten