C++Talk.NET Forum Index C++Talk.NET
C++ language newsgroups
 
Archives   FAQFAQ   SearchSearch   MemberlistMemberlist   UsergroupsUsergroups   RegisterRegister 
 ProfileProfile   Log in to check your private messagesLog in to check your private messages   Log inLog in 

Problem: Objekte bleiben nicht im Vector

 
Post new topic   Reply to topic    C++Talk.NET Forum Index -> C++ (German)
View previous topic :: View next topic  
Author Message
Joachim Praetorius
Guest





PostPosted: Mon Nov 03, 2003 8:20 am    Post subject: Problem: Objekte bleiben nicht im Vector Reply with quote



Hallo,

ich hänge im Moment an einem Problem, dem ich seine Wirkungsweise -
wohl wegen mangelndem Umfang an C++ Wissen - nicht entnommen bekomme.

Ich produziere - einfach gesagt - eine Menge an Punkten und eine Menge
an Objekten (Zellen), die diese enthalten sollen. Da dies auf
verschiedene Weisen geschehen kann werden sowohl die Punkte, als auch
die Zellen einzeln erzeugt und später zusammengeführt.
Zu diesem Zweck enthalten die Zellen einen std::vector in den ich die
Punkte einfüge um sie später - wenn ich alle Punkte verteilt habe -
ausgeben zu können.

Nun stellt sich das Problem, daß zu diesem späteren Zeitpunkt der
Vector der Zellen keine Punkte mehr enthält, obwohl dieses nach der
Zuweisung der Fall ist. Meine Frage ist also: Wo gehen meine Punkte
verloren ??

Ein wenig Beispielcode zur Verdeutlichung der Situation:

--
ThreeClusterGenerator* tg = new ThreeClusterGenerator();
vector<Cluster*> c;
vector<Cell> cl;
vector<Cell> cl2;

/* ZELLEN WERDEN ERZEUGT */
cerr<<"***Creating Cluster";
c = tg->createCluster(2,10);
cerr<<"t[done]" <

PerCellUniTerminalGenerator* ptg = new
PerCellUniTerminalGenerator();
vector cerr<
/*PUNKTE WERDEN ERZEUGT */
cerr<<"***Creating Terminals";
t = ptg->createTerminals(10,10.0);
cerr<<"t[done]" <
cerr<<"***Adding terminals" < for(int i=0;i cl = c[i]->getCells();
for(int j=0;j<cl.size();j++){
for(int k=0;k /*PUNKTE WERDEN ZUGEWIESEN */
cl[j].addTerminal(t[k]);
}
/* AN DIESER STELLE STIMMT DIE AUSGABE */
cerr<<"Cell has now " < Terminals" < /* DAS WAR EIN TEST */
cl2.push_back(cl[j]);
}
}

cerr<<"***Output" < for(int i=0;i cl = c[i]->getCells();
for(int j=0;j<cl.size();j++){
/* UND HIER SIND KEINE PUNKTE MEHR DA ! */
cerr<<"Cell has " < Terminals" < }
}

cerr< cerr<<"***2nd try Output" < for(int i=0;i /* HIER ALLERDINGS SCHON */
cerr<<"Cell has " < Terminals" < }

return 0;
}
--

Wie eingeschrieben: An der ersten Ausgabe (direkt nach der Zuweisung)
sind die Punkte noch da, der zweite Vector gibt sie auch nach der
kompletten Zuweisung wieder aus, nur dir Original-Objekte leider
nicht.

Die addTerminal-Methode sieht so aus:

--
Cell::addTerminal(Terminal t){

int i = terminals.size();
t.setAPName(getName());
t.setName(i);
t.setX(t.getX() + center.getX());
t.setY(t.getY() + center.getY());
terminals.push_back(t);
}//addTerminal

und terminals ist schließlich der std::vector der Klasse, der im
Header definiert wird über
--
private:
vector --

Bin für jegliche Hinweise dankbar...

grüße,
joachim
--

--
de.comp.lang.iso-c++ - Moderation: mailto:voyager+mod (AT) bud (DOT) prima.de
FAQ: http://www.voyager.prima.de/cpp/ mailto:voyager+send-faq (AT) bud (DOT) prima.de
Back to top
Karl Heinz Buchegger
Guest





PostPosted: Mon Nov 03, 2003 12:27 pm    Post subject: Re: Problem: Objekte bleiben nicht im Vector Reply with quote





Joachim Praetorius wrote:
Quote:

--
ThreeClusterGenerator* tg = new ThreeClusterGenerator();
vector<Cluster*> c;
vector<Cell> cl;

cl ist eine eigenstaendiges Objekt.

Quote:
vector<Cell> cl2;

/* ZELLEN WERDEN ERZEUGT */
cerr<<"***Creating Cluster";
c = tg->createCluster(2,10);
cerr<<"t[done]" <

PerCellUniTerminalGenerator* ptg = new
PerCellUniTerminalGenerator();
vector cerr<
/*PUNKTE WERDEN ERZEUGT */
cerr<<"***Creating Terminals";
t = ptg->createTerminals(10,10.0);
cerr<<"t[done]" <
cerr<<"***Adding terminals" < for(int i=0;i cl = c[i]->getCells();

Dieses cl wird nun mit einer Kopie von c[i]->getCells
zunaechst mal vorbelegt.

Quote:
for(int j=0;j<cl.size();j++){
for(int k=0;k /*PUNKTE WERDEN ZUGEWIESEN */
cl[j].addTerminal(t[k]);

dann fuegst Du Objekte in cl ein. Schoen und gut. Nur hat cl nichts mehr
mit c[i]->getCells() zu tun, denn cl ist ja ein eigenstaendiges Objekt. Du
fuegst also Deine Terminal Objekte zwar in cl ein, nicht aber in c[i]->getCells().


Quote:
}
/* AN DIESER STELLE STIMMT DIE AUSGABE */
cerr<<"Cell has now " < Terminals" <

logisch. Muss so sein.

Quote:
/* DAS WAR EIN TEST */
cl2.push_back(cl[j]);
}
}

cerr<<"***Output" < for(int i=0;i cl = c[i]->getCells();

Dann allerdings weist Du cl einen neuen Inhalt zu, naemlich alles was in
c[i]->getCells gespeichert ist. Dadurch geht natuerlich der alte Inhalt von
cl verloren ...

--
Karl Heinz Buchegger
[email]kbuchegg (AT) gascad (DOT) at[/email]

--
de.comp.lang.iso-c++ - Moderation: mailto:voyager+mod (AT) bud (DOT) prima.de
FAQ: http://www.voyager.prima.de/cpp/ mailto:voyager+send-faq (AT) bud (DOT) prima.de

Back to top
Karl Heinz Buchegger
Guest





PostPosted: Mon Nov 03, 2003 12:33 pm    Post subject: Re: Problem: Objekte bleiben nicht im Vector Reply with quote





Karl Heinz Buchegger wrote:
Quote:

Joachim Praetorius wrote:

--
ThreeClusterGenerator* tg = new ThreeClusterGenerator();
vector<Cluster*> c;
vector<Cell> cl;

cl ist eine eigenstaendiges Objekt.

vector<Cell> cl2;

/* ZELLEN WERDEN ERZEUGT */
cerr<<"***Creating Cluster";
c = tg->createCluster(2,10);
cerr<<"t[done]" <

PerCellUniTerminalGenerator* ptg = new
PerCellUniTerminalGenerator();
vector cerr<
/*PUNKTE WERDEN ERZEUGT */
cerr<<"***Creating Terminals";
t = ptg->createTerminals(10,10.0);
cerr<<"t[done]" <
cerr<<"***Adding terminals" < for(int i=0;i cl = c[i]->getCells();

Dieses cl wird nun mit einer Kopie von c[i]->getCells
zunaechst mal vorbelegt.

Also: vom i-ten Cluster alle Zellen.

Quote:

for(int j=0;j<cl.size();j++){
for(int k=0;k /*PUNKTE WERDEN ZUGEWIESEN */
cl[j].addTerminal(t[k]);

dann fuegst Du Objekte in cl ein. Schoen und gut. Nur hat cl nichts mehr
mit c[i]->getCells() zu tun, denn cl ist ja ein eigenstaendiges Objekt. Du
fuegst also Deine Terminal Objekte zwar in cl ein, nicht aber in c[i]->getCells().

Du fuegst zwar Terminal Objekt in cl ein, nicht jedoch in den i-ten Cluster in c.

Quote:

}
/* AN DIESER STELLE STIMMT DIE AUSGABE */
cerr<<"Cell has now " < Terminals" <
logisch. Muss so sein.

/* DAS WAR EIN TEST */
cl2.push_back(cl[j]);
}
}

cerr<<"***Output" < for(int i=0;i cl = c[i]->getCells();

Dann allerdings weist Du cl einen neuen Inhalt zu, naemlich alles was in
c[i]->getCells gespeichert ist. Dadurch geht natuerlich der alte Inhalt von
cl verloren ...

cl kriegt eine neue Belegung vom i-ten Cluster.


Die Terminologie da oben hab ich etwas verbockt. Das grundsatzliche Problem aber bleibt:
cl ist eine lokale Variable, wenn Du cl manipulierst, so ist das dem i-ten Cluster
piepschnurzegal.

--
Karl Heinz Buchegger
[email]kbuchegg (AT) gascad (DOT) at[/email]

--
de.comp.lang.iso-c++ - Moderation: mailto:voyager+mod (AT) bud (DOT) prima.de
FAQ: http://www.voyager.prima.de/cpp/ mailto:voyager+send-faq (AT) bud (DOT) prima.de

Back to top
Joachim Praetorius
Guest





PostPosted: Mon Nov 03, 2003 2:31 pm    Post subject: Re: Problem: Objekte bleiben nicht im Vector Reply with quote

Karl Heinz Buchegger wrote:

Quote:
cl ist eine eigenstaendiges Objekt.
_DAS_ wars was mir irgendwie fehlte. Zuviel Java-Eingewöhnung.. Wink

Danke.

Quote:

Dieses cl wird nun mit einer Kopie von c[i]->getCells
zunaechst mal vorbelegt.

Also: vom i-ten Cluster alle Zellen.
Du fuegst zwar Terminal Objekt in cl ein, nicht jedoch in den i-ten Cluster in c.
cl kriegt eine neue Belegung vom i-ten Cluster.


Die Terminologie da oben hab ich etwas verbockt. Das grundsatzliche Problem aber bleibt:
cl ist eine lokale Variable, wenn Du cl manipulierst, so ist das dem i-ten Cluster
piepschnurzegal.

Ich hatte es auch beim ersten Mal dann begriffen. Nochmal: vielen Dank
fürs Tomaten von den Augen nehmen. Wenn ich an der Stelle nen Pointer
nehme und den dann eifrig dereferenziere sollte ich hinkommen, denke
ich?
Gut, jetzt weiß ich wo ich weiterzusuchen habe...

joachim

--
de.comp.lang.iso-c++ - Moderation: mailto:voyager+mod (AT) bud (DOT) prima.de
FAQ: http://www.voyager.prima.de/cpp/ mailto:voyager+send-faq (AT) bud (DOT) prima.de

Back to top
Display posts from previous:   
Post new topic   Reply to topic    C++Talk.NET Forum Index -> C++ (German) All times are GMT
Page 1 of 1

 
Jump to:  
You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot vote in polls in this forum


Powered by phpBB © 2001, 2006 phpBB Group
SEO toolkit © 2004-2006 webmedic.