Zum Inhalt springen
View in the app

A better way to browse. Learn more.

Fachinformatiker.de

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

Empfohlene Antworten

Veröffentlicht

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.

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.

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.

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.

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.

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....

Erstelle ein Konto oder melde dich an, um einen Kommentar zu schreiben.

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.