Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (ANSI-Standard) » wird beim std::<list>.push_back() eine kopie erstellt?

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 <
000
15.11.2009, 23:03 Uhr
lordZ



hallo,

wiedermal ein kleines problem,
also mein programm funktioniert eigentlich wie gewünscht,
im prinzip habe ich es folgendermaßen aufgebaut:


C++:
class Neuron
{
    int layer_id;
    int id;
    double value;
    double error;
    std::list<Synapse> childs;
    std::list<Synapse> parents;

void Neuron::addChild(Synapse* toAdd){
    this->childs.push_back(*toAdd);
}

void Neuron::addParent(Synapse* toAdd){
    this->parents.push_back(*toAdd);
}
}





C++:
class Synapse
{

    double value;
    double error;
    Neuron* Parent;
    Neuron* Child;
}



eine neue synapse erstelle ich folgendermaßen:


C++:
            Synapse* tmpsyn=new Synapse();
            tmpsyn->init(parent->getPointer(),child->getPointer());
            parent->addChild(tmpsyn);
            child->addParent(tmpsyn);




Mein plan war es diese verbinung bidirektional zu nutzen, obwohl di kommunikation in beide richtungen funktioniert läuft sie doch nicht über die selbe synapse.
hoffe ich habe mich einigermaßen verständlich ausgedrückt.

mfg //z

Dieser Post wurde am 15.11.2009 um 23:05 Uhr von lordZ editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
26.11.2009, 20:39 Uhr
~Prog
Gast


Ja, es wird eine Kopie erstellt. Du erzeugst da also mit jeder Synapse ne Speicherleiche (oder rufst du delete noch irgendwo auf?)

Die Zeile


C++:
Synapse* tmpsyn=new Synapse();



ist übrigens auch falsch. In Java währe es richtig eine leere Konstruktorliste mit anzugeben, in C++ ist das unzulässig, es muss


C++:
Synapse* tmpsyn=new Synapse;



heißen. Da sowieso eine Kopie erzeugt wird, solltest du das Anlegen der Synapse besser auf dem Stack machen:


C++:
Synapse tmpsyn;



Ich verstehe allerdings noch nicht ganz, was du insgesamt machen möchtest. Folgendes Codestück ist mir nicht verständlich:


C++:
Synapse* tmpsyn=new Synapse;
tmpsyn->init(parent->getPointer(),child->getPointer());
parent->addChild(tmpsyn);
child->addParent(tmpsyn);



Synapse hat deiner Klassenbeschreibung zufolge keine Funktion namens init() und für parent und child ist nicht mal der Datentyp bekannt.

Gruß Prog
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 <     [ 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: