tutorials.de Buch-Aktion 05/2012
Like Tree1Danke
  • 1 Beitrag von Matthias Reitinger
ERLEDIGT
NEIN
ANTWORTEN
3
ZUGRIFFE
1206
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    bEKAR bEKAR ist offline Mitglied
    Registriert seit
    Nov 2003
    Beiträge
    12
    Hallo Leute,

    ich suche jetzt seit sicher 4 Stunden ungelogen ein C++ Observer Pattern das einfach ist und funktioniert. Ich hab schon soviele komplexe gefunden oder welche mit abhängigkeiten zu Bibliotheken die ich nicht finde. Ich hab auch die Google Code suche benutzt und die Board suche ausserdem bei Bing und Youtube nach Videos zu dem Thema gesucht fast nicht gefunden. Ausser einen Inder der nur von Design Pattern redet aber sonst nichts macht.

    Hat jemand von euch Patterns geschrieben die er mir schicken könnte oder hier hochladen oder wie auch immer mir bitte zugänglich machen. Ich bin langsam am verzweifeln meine eigenen Versuche enden immer in sehr verwirrenden Compiler Fehlern.

    Danke für eure Hilfe!

    ps. Seiten zu halb fertigen Patterns habe ich schon genug gefunden bitte dahingehend keine Tipps mehr ich suche vollständige Beispiele.

    Danke

    Gruß bEKAR
     

  2. #2
    Registriert seit
    Dec 2001
    Ort
    Bayern
    Beiträge
    5.802
    Blog-Einträge
    5
    Hallo bEKAR,

    das erste Google-Suchergebnis zu „observer pattern“ war bei mir eben die Wikipedia-Seite zum Thema, die auch eine C++-Implementierung beinhaltet. Die sieht doch relativ einfach aus… die englische Wikipedia listet dazu noch Links zu vielen Implementierungen auf. Von diesen ist z.B. Signals recht einfach gehalten.

    Grüße,
    Matthias
    bEKAR bedankt sich. 
    „Gib einem Menschen einen Fisch, und er wird für einen Tag satt. Lehre ihn Fischen, und er wird ein Leben lang satt.“
    “For every complex problem, there is an answer that is short, simple and wrong.”
    “Pessimism is safe, but optimism is a lot faster!”


    Aktuelles Coding Quiz: #17 - Wörter kreuz und quer

  3. #3
    bEKAR bEKAR ist offline Mitglied
    Registriert seit
    Nov 2003
    Beiträge
    12
    Danke Matthias,

    aber das ist auch das was ich meine überall sind Andeutungen wie das Pattern implementiert werden könnte leider fehlt immer irgendwo eine kleine Ecke an Informationen.

    Ich habe jetzt diesen Code implementiert

    PHP-Code:
      #include <list>

    using namespace std;

    class 
    Subject;


       class 
    Observer {
       public:
           
    virtual ~Observer();
           
    virtual void Update(SubjecttheChangedSubject) = 0;
       protected:
           
    Observer();
       };

       class 
    Subject {
       public:
           
    virtual ~Subject();

           
    virtual void Attach(Observer*);
           
    virtual void Detach(Observer*);
           
    virtual void Notify();
       protected:
           
    Subject();
       private:
          list<
    Observer*> *_observers;
       };

       
    int main()
       {
           return 
    0;
       }

       
    void Subject::Attach (Observero) {
           
    _observers->push_back(o);
       }

       
    void Subject::Detach (Observero) {
           
    _observers->remove(o);
       }

       
    void Subject::Notify () {

           
    //list<Observer*>::iterator i(_observers);



           
    for (list<Observer*>::iterator i=_observers->begin(); i!=_observers->end(); i++) {
               
    i->Update(this);
    //           _observers->
    //           i->()->Update(this);
           
    }
       } 
    da kommt dann diese Fehlermeldung

    request for member `Update' in `*(&i)->std::_List_iterator<_Tp>::operator-> [with _Tp = Observer*]()', which is of non-class type `Observer*' Observer.cpp /ObservervonGoogleCodeSuche/src line 49 C/C++ Problem

    Wenn ich es mit der alten Notify Methode mache also

    PHP-Code:
     void Subject::Notify () {
           
    ListIterator<Observer*> i(_observers);
        
           for (
    i.First(); !i.IsDone(); i.Next()) {
               
    i.CurrentItem()->Update(this);
           }
       } 
    kommen diese Fehlermeldung

    Description Resource Path Location Type
    `i' was not declared in this scope Observer.cpp /ObservervonGoogleCodeSuche/src line 46 C/C++ Problem
    `ListIterator' was not declared in this scope Observer.cpp /ObservervonGoogleCodeSuche/src line 46 C/C++ Problem
    expected declaration before '}' token Observer.cpp /ObservervonGoogleCodeSuche/src line 58 C/C++ Problem
    expected primary-expression before '>' token Observer.cpp /ObservervonGoogleCodeSuche/src line 46 C/C++ Problem
    expected primary-expression before '*' token Observer.cpp /ObservervonGoogleCodeSuche/src line 46 C/C++ Problem

    vielleicht kannst du mir bei den beiden Fehlern helfen? Oder sagen was ich lesen kann um den Fehler zu verstehen?

    Danke bEKAR
     

  4. #4
    Registriert seit
    Dec 2001
    Ort
    Bayern
    Beiträge
    5.802
    Blog-Einträge
    5
    Zitat Zitat von bEKAR Beitrag anzeigen
    aber das ist auch das was ich meine überall sind Andeutungen wie das Pattern implementiert werden könnte leider fehlt immer irgendwo eine kleine Ecke an Informationen.
    Was fehlt dir denn konkret an der Lösung aus der Wikipedia? Bei mir funktioniert die einwandfrei…

    Zitat Zitat von bEKAR Beitrag anzeigen
    Ich habe jetzt diesen Code implementiert
    […]
    da kommt dann diese Fehlermeldung

    request for member `Update' in `*(&i)->std::_List_iterator<_Tp>::operator-> [with _Tp = Observer*]()', which is of non-class type `Observer*' Observer.cpp /ObservervonGoogleCodeSuche/src line 49 C/C++ Problem
    Dir fehlt eine Dereferenzierung an dieser Stelle.

    Zitat Zitat von bEKAR Beitrag anzeigen
    Wenn ich es mit der alten Notify Methode mache also

    PHP-Code:
     void Subject::Notify () {
           
    ListIterator<Observer*> i(_observers);
        
           for (
    i.First(); !i.IsDone(); i.Next()) {
               
    i.CurrentItem()->Update(this);
           }
       } 
    kommen diese Fehlermeldung

    Description Resource Path Location Type
    `i' was not declared in this scope Observer.cpp /ObservervonGoogleCodeSuche/src line 46 C/C++ Problem
    `ListIterator' was not declared in this scope Observer.cpp /ObservervonGoogleCodeSuche/src line 46 C/C++ Problem
    expected declaration before '}' token Observer.cpp /ObservervonGoogleCodeSuche/src line 58 C/C++ Problem
    expected primary-expression before '>' token Observer.cpp /ObservervonGoogleCodeSuche/src line 46 C/C++ Problem
    expected primary-expression before '*' token Observer.cpp /ObservervonGoogleCodeSuche/src line 46 C/C++ Problem
    Der Typ ListIterator wurde nirgends definiert. Woher sollte der kommen? Das ist zumindest keine Klasse aus der STL.

    Außerdem enthält die Klasse Subject einen Zeiger auf eine Liste (_observers), der nie initialisiert wird.

    Grüße,
    Matthias
     
    „Gib einem Menschen einen Fisch, und er wird für einen Tag satt. Lehre ihn Fischen, und er wird ein Leben lang satt.“
    “For every complex problem, there is an answer that is short, simple and wrong.”
    “Pessimism is safe, but optimism is a lot faster!”


    Aktuelles Coding Quiz: #17 - Wörter kreuz und quer

Ähnliche Themen

  1. Antworten: 0
    Letzter Beitrag: 25.06.09, 12:44
  2. Pattern
    Von saila im Forum PHP
    Antworten: 2
    Letzter Beitrag: 26.02.07, 15:04
  3. Pattern
    Von iGarfield im Forum Photoshop
    Antworten: 14
    Letzter Beitrag: 11.01.07, 14:48
  4. Pattern
    Von gilldex im Forum Photoshop
    Antworten: 3
    Letzter Beitrag: 23.06.05, 20:20
  5. Pattern
    Von low-group im Forum PHP
    Antworten: 5
    Letzter Beitrag: 06.12.04, 01:06