Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (ANSI-Standard) » Zugriff auf nicht statisches Array

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 < [ 2 ]
000
12.11.2009, 18:02 Uhr
~lordZ
Gast


Hallo,

ich dreh grad durch und komm einfach nicht auf die lösung,
bastel grad an einem neuralen, netz und hab deswegen mal wieder c++ ausgepackt hab leider eewig nichts mehr damit gebastelt.
zum code:

so ist jedes meiner layer aufgebaut:


C++:

#include "NeuroNetSynapse.h"
#include "NeuroNetTransition.h"
class NeuroNetLayer
{
private:
    NeuroNetSynapse* Synapses;
    NeuroNetTransition* Transitions;
public:
    NeuroNetLayer(void);
    void initialize(int size);
    double getTransitionValue(int transition);
};




jedoch funktioniert hier:


C++:
#include "StdAfx.h"
#include "NeuroNetLayer.h"
#include "NeuroNetSynapse.h"
#include "NeuroNetTransition.h"

NeuroNetLayer::NeuroNetLayer(void)
{

}

void NeuroNetLayer::initialize(int size){
    NeuroNetLayer::Synapses=0;
    NeuroNetLayer::Transitions=0;
    NeuroNetLayer::Synapses=new NeuroNetSynapse [size];
    NeuroNetLayer::Transitions=new NeuroNetTransition [size];
}

double getTransitionValue(int transition){
    return NeuroNetLayer::Transitions[transition]::getValue();
}




der zugriff "NeuroNetLayer::Transitions[transition]::getValue();" nicht, da:

error C2597: Ungültiger Verweis auf nicht-statischen Member 'NeuroNetLayer::Transitions'

komm einfach nit drauf wie ich des umbauen könnte..

danke scho mal im voraus.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
12.11.2009, 18:43 Uhr
Tommix



Hallo,
ich würd mal auf

C++:
return Transistions[transition].getValue();


tippen. Und vergiß nicht im Destruktor alles mit new[] allokierte mit delete[] wieder frei zu geben.

Gruß, Tommix
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
12.11.2009, 18:59 Uhr
~lordZ
Gast



Zitat von Tommix:
Hallo,
ich würd mal auf

C++:
return Transistions[transition].getValue();


tippen. Und vergiß nicht im Destruktor alles mit new[] allokierte mit delete[] wieder frei zu geben.

Gruß, Tommix


ne, Transitions ist in dem Bereich nicht deklariert
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
12.11.2009, 19:11 Uhr
~lordZ
Gast


OMG!


C++:

double getTransitionValue(int transition){
    return NeuroNetLayer::Transitions[transition.getValue();
}



sollte natürlich so:


C++:

double NeuroNetLayer::getTransitionValue(int transition){
    return NeuroNetLayer::Transitions[transition.getValue();
}



sein.
naja 2 stunden füx nix verballert


Bearbeitung:

cpp-tags korrigiert: cccp ist was anderes gewesen


Dieser Post wurde am 13.11.2009 um 16:07 Uhr von FloSoft editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
12.11.2009, 19:22 Uhr
ao

(Operator)


Warum schreibst du denn überall den Klassennamen hin?

C++:
void NeuroNetLayer::initialize(int size){
    Synapses=0;
    Transitions=0;
    Synapses=new NeuroNetSynapse [size];
    Transitions=new NeuroNetTransition [size];
}

 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
005
12.11.2009, 19:39 Uhr
~lordZ
Gast



Zitat von ao:
Warum schreibst du denn überall den Klassennamen hin?

C++:
void NeuroNetLayer::initialize(int size){
    Synapses=0;
    Transitions=0;
    Synapses=new NeuroNetSynapse [size];
    Transitions=new NeuroNetTransition [size];
}




wusst gar nicht dass man des nicht musst
danke
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
006
12.11.2009, 23:39 Uhr
0xdeadbeef
Gott
(Operator)


Ich rate dringend zu

C++:
#ifndef INCLUDED_NEURONETLAYER_H
#define INCLUDED_NEURONETLAYER_H


#include "NeuroNetSynapse.h"
#include "NeuroNetTransition.h"

#include <cstddef>
#include <vector>


class NeuroNetLayer
{
private:
    std::vector<NeuroNetSynapse> Synapses;
    std::vector<NeuroNetTransition> Transitions;
public:
    NeuroNetLayer();

    void   initialize        (std::size_t size);
    double getTransitionValue(std::size_t transition);
};

#endif



C++:
#include "StdAfx.h"
#include "NeuroNetLayer.h"

NeuroNetLayer::NeuroNetLayer()
{

}

void NeuroNetLayer::initialize(std::size_t size){
    Synapses.resize(size);
    Transitions.resize(size);

}

double getTransitionValue(std::size_t transition){
    return Transitions[transition].getValue();
}


...dann klappt's auch mit der Freigabe. Wahrscheinlich wäre es auch sinnvoll, getTransitionValue() const zu machen, aber dafür muss auch NeuroNetTransition::getValue() const sein.
--
Einfachheit ist Voraussetzung für Zuverlässigkeit.
-- Edsger Wybe Dijkstra

Dieser Post wurde am 12.11.2009 um 23:43 Uhr von 0xdeadbeef editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
007
13.11.2009, 15:54 Uhr
~lordZ
Gast


hallo, werd di synapsen vektoren umstellen, jedoch habe ich mich beim design vertan, werd di als linked list implementieren, da ich dann di möglichkeit habe dynamisch neue layers hinzuzufügen und zu entfernen.

kannst mir vlt den vorteil von std::size_t anstadt int verraten?



jetzt bin ich aber zu einem neuen problem gekommen beim neuen design, und zwar lässt sich folgender code nicht compilieren.

Neuron.h

C++:

#pragma once
#include "NeuroTransmitter.h"

class Neuron
{
    NeuroTransmitter* transmitter;
public:
    Neuron(void);
    ~Neuron(void);
};




NeuroTransmitter.h

C++:

#pragma once
#include "Neuron.h"

class NeuroTransmitter
{
private:
    Neuron* parent;
    Neuron* child;
        Neurotransmitter* next;
public:
    NeuroTransmitter(void);
    ~NeuroTransmitter(void);
};


Dieser Post wurde am 13.11.2009 um 16:08 Uhr von FloSoft editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
008
13.11.2009, 16:01 Uhr
Tommix



Zwei Header können sich nicht wechselseitig includieren, Du mußt eine Vorwärts-Deklaration einbauen:

C++:
#pragma once

//#include "NeuroTransmitter.h"

class NeuroTransmitter;

class Neuron
{
    NeuroTransmitter* transmitter;
public:
    Neuron(void);
    ~Neuron(void);
};



- Tommix
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
009
13.11.2009, 16:03 Uhr
lordZ



verdammte tippfehler, jetzt hab ich mich mal registiert um editieren zu können

also:

werd di Synapsen auf Vektoren umstellen, hätt ich von anfang an so machen sollen.

jedoch hatte ich ein kleinen designproblem, deswegen, neuanfang.

di transitions werd ich als linked list implementieren. das verschafft mir di möglichkeit, dynamisch neue layers hinzuzufügen und zu entfernen ohne das netz neu aufzubauen.

jedoch stellt sich der compiler gleich am anfang quer. wiederauffrischung der OO-programmierung wird wohl fällig.

Neuron.h:


C++:
#pragma once
#include "NeuroTransmitter.h"

class Neuron
{
    NeuroTransmitter* transmitter;
public:
    Neuron(void);
    ~Neuron(void);
};




NeuroTransmitter.h


C++:
#pragma once
#include "Neuron.h"

class NeuroTransmitter
{
private:
    Neuron* parent;
    Neuron* child;
    NeuroTransmitter* next;
    NeuroTransmitter* previous;
public:
    NeuroTransmitter(void);
    ~NeuroTransmitter(void);
};




compiler meldet:

1>neurotransmitter.h(7) : error C2143: Syntaxfehler: Es fehlt ';' vor '*'
1>neurotransmitter.h(7) : error C4430: Fehlender Typspezifizierer - int wird angenommen. Hinweis: "default-int" wird von C++ nicht unterstützt.
1>neurotransmitter.h(7) : error C4430: Fehlender Typspezifizierer - int wird angenommen. Hinweis: "default-int" wird von C++ nicht unterstützt.
1>neurotransmitter.h(8) : error C2143: Syntaxfehler: Es fehlt ';' vor '*'
1>neurotransmitter.h(8) : error C4430: Fehlender Typspezifizierer - int wird angenommen. Hinweis: "default-int" wird von C++ nicht unterstützt.
1>neurotransmitter.h(8) : error C4430: Fehlender Typspezifizierer - int wird angenommen. Hinweis: "default-int" wird von C++ nicht unterstützt.
1>NeuroTransmitter.cpp
1>neuron.h(6) : error C2143: Syntaxfehler: Es fehlt ';' vor '*'
1>neuron.h(6) : error C4430: Fehlender Typspezifizierer - int wird angenommen. Hinweis: "default-int" wird von C++ nicht unterstützt.
1>neuron.h(6) : error C4430: Fehlender Typspezifizierer - int wird angenommen. Hinweis: "default-int" wird von C++ nicht unterstützt.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 < [ 2 ]     [ C / C++ (ANSI-Standard) ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: