Seite 15 von 202 ErsteErste ... 51112131415161718192565115 ... LetzteLetzte
Ergebnis 211 bis 225 von 3026

Thema: [Programmiererstammtisch] "Zum ächzenden Compiler"

  1. #211
    Registrierter Benutzer Avatar von alpha civ
    Registriert seit
    22.07.06
    Beiträge
    16.757
    Die Sprache Java hat keine Zeiger. Sonst könnte man die gleichen "lustigen" Sachen wie in C++ machen.

  2. #212
    Beyond Mars Avatar von [VK]
    Registriert seit
    05.02.08
    Beiträge
    59.566
    Kurze Frage:

    Wie würde ich in c++ ein Klasse bzw Interface (also pure virtuelle Klasse) IWriteable erzeugen das dafür sorgt das jede Klasse die es implementiert in einen Stream eingespeist werden kann. Also die Funktion std::ostream& operator<< (std::ostream& os, IWriteable w) implementieren muss. Wenn ich richtig sehe meckert das Ding deswegen rum, und irgendwo hieß es glaub das man die operation nicht in eine Klasse schreiben kann oder sowas?

    Im Grunde ließe sich das ganze wohl auch über eine eigene Funktion write() machen, dachte aber über operator<< würde es sauberer sein...

    Edith: Hab glaub eine Idee...

    op<< in IWriteable nebendran übergibt einer Methode write() die jede writeable Klasse hat den Stream und die Klasse führt dann in write die Einspeisung in den Stream aus und op<< returned den stream...

  3. #213
    Registrierter Benutzer Avatar von alpha civ
    Registriert seit
    22.07.06
    Beiträge
    16.757
    Brauchst du dynamische Polymorphie? Oder reicht statische? Weil dann verwende lieber Templates.

  4. #214
    Beyond Mars Avatar von [VK]
    Registriert seit
    05.02.08
    Beiträge
    59.566
    Im Grunde ja bräuchte ich, bzw ich wüsste jetzt nicht wie ich das ganze "sauber" machen würde mit templates

  5. #215
    Beyond Mars Avatar von [VK]
    Registriert seit
    05.02.08
    Beiträge
    59.566
    In file included from src\Map.hpp:7:0,
    from src\main.cpp:4:
    src\IWriteable.hpp: In function 'std::ostream& operator<<(std::ostream&, const I
    Writeable&)':
    src\IWriteable.hpp:13:16: error: passing 'const IWriteable' as 'this' argument o
    f 'virtual const void IWriteable::write(std::ostream&)' discards qualifiers [-fp
    ermissive]
    w.write(os);

    Wenn ich das const bei std::ostream& operator<< (std::ostream& os, const IWriteable& w) { w.write(os); return os; } wegmache verschwindet der Fehler. Sehe ich richtig das es annimmt das write() die variable w ändert und deswegen rummeckert? Hieße, wenn ich ihm sage das write als Funktion nichts ändert ist er ruhig?

  6. #216
    Beyond Mars Avatar von [VK]
    Registriert seit
    05.02.08
    Beiträge
    59.566
    Zitat Zitat von [VK] Beitrag anzeigen
    In file included from src\Map.hpp:7:0,
    from src\main.cpp:4:
    src\IWriteable.hpp: In function 'std::ostream& operator<<(std::ostream&, const I
    Writeable&)':
    src\IWriteable.hpp:13:16: error: passing 'const IWriteable' as 'this' argument o
    f 'virtual const void IWriteable::write(std::ostream&)' discards qualifiers [-fp
    ermissive]
    w.write(os);

    Wenn ich das const bei std::ostream& operator<< (std::ostream& os, const IWriteable& w) { w.write(os); return os; } wegmache verschwindet der Fehler. Sehe ich richtig das es annimmt das write() die variable w ändert und deswegen rummeckert? Hieße, wenn ich ihm sage das write als Funktion nichts ändert ist er ruhig?


    Erst machen dann fragen

    Naja, manchmal hilft das ausschreiben beim denken...

    Hab grad versucht das const vor's write zu schreiben statt dahinter

  7. #217
    Registrierter Benutzer Avatar von alpha civ
    Registriert seit
    22.07.06
    Beiträge
    16.757
    Du hast ja oben schon einen Weg beschrieben: Jede Klasse muss eine bestimmte Methode (z.B. write) implementieren. Diese Methode wird dann von

    std::ostream& operator<< (std::ostream&, const IWriteable*)

    aufgerufen.

  8. #218
    Registrierter Benutzer Avatar von alpha civ
    Registriert seit
    22.07.06
    Beiträge
    16.757
    Zitat Zitat von [VK] Beitrag anzeigen
    Hab grad versucht das const vor's write zu schreiben statt dahinter
    Du musst aber einen Zeiger übergeben, keine Referenz! Sonst wird nicht die richtige Methode aufgerufen, sondern nur die Methode von IWritable.

  9. #219
    Beyond Mars Avatar von [VK]
    Registriert seit
    05.02.08
    Beiträge
    59.566
    Hmm, hab jetzt das Problem das op<< jedesmal definiert wird obwohl ich #pragma once in der Datei hab...

    Gibt's eine bessere Möglichkeit als die op<< Funktion in eine eigene Datei zu schreiben?

  10. #220
    Registrierter Benutzer Avatar von alpha civ
    Registriert seit
    22.07.06
    Beiträge
    16.757
    Statt #pragma once lieber sowas machen:

    #ifndef DATEINAME_H
    #define DATEINAME_H

    // Hier dann der Code

    #endif


    Das funktioniert unabhängig vom Compiler. DATEINAME steht dabei für den Dateinamen. Am besten auch stets groß schreiben.

  11. #221
    Beyond Mars Avatar von [VK]
    Registriert seit
    05.02.08
    Beiträge
    59.566
    Ist sowas eigentlich sinnvoll?
    Reiner Header:
    public:
    virtual ~IGenerator() { };
    std::shared_ptr<Map> map;

    Der shared_ptr wird ja "automatisch" gelöscht und braucht keine explizite Löschung, das macht im Zweifel auch der leere Dekonstruktor. Also im Header den Dekonstrukter bei einer puren virtuellen Klasse definieren...

    Und eh, gibt's mit shared_ptr eine Möglichkeit this zu übergeben?

  12. #222
    Registrierter Benutzer Avatar von alpha civ
    Registriert seit
    22.07.06
    Beiträge
    16.757
    Warum willst du this übergeben?

  13. #223
    Beyond Mars Avatar von [VK]
    Registriert seit
    05.02.08
    Beiträge
    59.566
    Wenn ich zbs Eine Klasse World hab, und auf dieser Klasse existieren zbs eine Object Cat und Mouse. Die Cat kann ja ohne Zugriff auf die World nicht erfahren wo die Mouse ist. deshalb muss World.tick() { cat.tick(this); mouse.tick(this) } aussehen. Zumindest war das mein Gedanke, damit die Cat nachschauen kann wo sich die Maus befindet. Einen Pointer in der Klasse Cat auf World würde ich eher ungerne speichern

  14. #224
    Registrierter Benutzer Avatar von alpha civ
    Registriert seit
    22.07.06
    Beiträge
    16.757
    Du kannst aber Cat mitteilen (durch Übergabe von geeigneten Werten), wie weit Mouse entfernt ist, und in welcher Richtung. Weder Cat noch Mouse müssen alles über World wissen, deswegen am besten auch nicht World als Parameter übergeben.

  15. #225
    Beyond Mars Avatar von [VK]
    Registriert seit
    05.02.08
    Beiträge
    59.566
    Hmm, ok ist ein Argument, dann muss aber World wissen was Cat braucht. Wenn Cat es selbst noch nicht weiß weil das zbs erst beim Aufrufen des ticks bekannt wird (schlafen oder Maus jagen) funktioniert das ganze ja nicht ohne alle Potentiellen Möglichkeiten zu übergeben. Höchstens irgendwie über eine Funktion das World Cat fragt was Cat machen wird, und dann die Aktion auf Cat aufruft. Da muss jetzt World über Cat "inneres" Bescheid wissen was mir garnicht gefällt

    Wäre es da nicht sinnvoller Cat und Mouse nicht in World zu speichern?

Seite 15 von 202 ErsteErste ... 51112131415161718192565115 ... LetzteLetzte

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •