umsteiger Geschrieben 24. November 2005 Teilen Geschrieben 24. November 2005 Hallo Folgendes Problem: ich habe einen vektor "vector<MobileNode*> mobnodes;" in einer klasse definiert und muss nun in einer anderen klasse darauf zugreiffen. da ich ein grösseres programm erweitere ist eine lösung mit vererbung nicht möglich. desweiteren habe ich es nicht geschafft das problem mit "static" oder "extern" aufgrund von linker-fehlern zu lösen. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Guybrush Threepwood Geschrieben 24. November 2005 Teilen Geschrieben 24. November 2005 Was spricht gegen eine Instanz der Klasse mit dem Vector :confused: Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
umsteiger Geschrieben 24. November 2005 Autor Teilen Geschrieben 24. November 2005 Ok, das Problem von anfang an: Es gibt eine Klasse "MobileNode" in der zu irgend einem Zeitpunkt Instaznzen dieser Klasse erzeugt werden. Ich soll nun das bestehende Programm so erweitern, dass "auf Knopfdruck" verschiedene Variablen dieser Instanzen ausgelesen und verabeitet werden. Dazu wollte ich nun jedesmal wenn der Konstruktor der Klasse "MobileNode" aufgerufen wird einen Zeiger auf das gerade erzeugte Objekt in einen Vektor speichern, um so später daruaf zugreiffen zu können. Die Verarbeitung soll in der Klasse "IDSAgent" passiern. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
perdian Geschrieben 24. November 2005 Teilen Geschrieben 24. November 2005 Dazu wollte ich nun jedesmal wenn der Konstruktor der Klasse "MobileNode" aufgerufen wird einen Zeiger auf das gerade erzeugte Objekt in einen Vektor speichern, um so später daruaf zugreiffen zu können. Die Verarbeitung soll in der Klasse "IDSAgent" passiern.Urgh... das klingt nach einem furchtbaren Design. Auch hier gilt der Grundsatz: Ein Objekt sollte so wenig wie möglich über andere Objekte wissen. Konkret für deinen Fall bedeutet das: Lass das mit dem Referenz auf das Objekt im Konstruktor speichern weg. Das Objekt, von der aus die MobileNode Instanzen erzeugt werden, erhhält intern einen eigenen Lookup. In dem wird jeweils nach dem Erzeugen der MobileNode Instanz, genau diese Instanz gespeichert. Zu überlegen wäre noch, das ganze generell noch in eine eigene Klasse auszulagern, so dass du folgende Struktur hättest: IDSAgent - erzeugt und verwaltet die MobileNode Instanzen MobileNodeLookup - speichert die erstellten Instanzen MobileNode - das eigentliche Datenobjekt Bevor du weitermachst würde ich dir aber empfehlen dich generell nochmal intensiv mit dem Konzept "objektorientierte Programmierung" vertraut zu machen. Nicht mit dem konkreten Umgang von Klassen und Objekten in einer Programmiersprache sondern ganz allgemein mit den Ideen und Konzepten. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
umsteiger Geschrieben 24. November 2005 Autor Teilen Geschrieben 24. November 2005 Wie gesagt erweitere ich ein bestehendes Programm (den ns-2 Netzwerk Simulator). Dazu möchte ich einmal nicht zuviel im Original-Code "rumpfuschen", kann andererseites auch nicht einfach so z.B. ein MobileNode-Objekt erzeugen, ohne die Simulationsergebnisse zu verfälchen. Da ich eigentlich Objektorientirung mit Java gelernt habe ist das eigentliche Problem die genau c-Syntax. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
perdian Geschrieben 24. November 2005 Teilen Geschrieben 24. November 2005 Wie gesagt erweitere ich ein bestehendes Programm (den ns-2 Netzwerk Simulator). Dazu möchte ich einmal nicht zuviel im Original-Code "rumpfuschen", kann andererseites auch nicht einfach so z.B. ein MobileNode-Objekt erzeugen, ohne die Simulationsergebnisse zu verfälchen. Dann musst du zwischen zwei Möglichkeiten abwägen: Möglichkeit A: du änderst den bestehenden Code so ab, dass die Struktur sauber wird, und du recht einfach deine Änderungen einbauen kannst. Vorteil ist, dass die Programmstruktur hinterher sauber(er) ist und du weisst, was gemacht worden ist und auch bei zukünftigen Änderungen noch etwas tun kannst. Der Nachteil ist, dass es sehr wahrscheinlich länger dauern wird. Möglichkeit B: Die Änderungen quick&dirty in den alten Quelltext einbauen. Wird wahrscheinlich schnell gehen, aber gibt nur noch schlechteren Code und wenn du irgendwann nochmal was ändern musst wirst du wahrscheinlich wieder wie der Ochs vorm Berg stehen und dich mit dem ganzen Thema wieder von vorne befassen müssen. Da ich eigentlich Objektorientirung mit Java gelernt habe ist das eigentliche Problem die genau c-Syntax.Die Syntax ist das kleinste Problem. Es geht sich darum die Strukturen zu verstehen. Was ist ein Objekt, was ist ein Konstruktur, und wie ist das Zusammenspiel zwischen den Objekten. Ob du dann vor einem C++ oder einem Java Quelltext sitzt spielt eine untergeordnete Rolle. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
umsteiger Geschrieben 25. November 2005 Autor Teilen Geschrieben 25. November 2005 ok, danke für die hilfe, habe das problem gelöst. "vector" war innerhalb des projektes neu definiert worden und daher kammen die compiler-fehler.... Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.