tutorials.de Buch-Aktion 05/2012
Like Tree3Danke
  • 1 Beitrag von sheel
  • 1 Beitrag von MCoder
  • 1 Beitrag von deepthroat
ERLEDIGT
JA
ANTWORTEN
7
ZUGRIFFE
761
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    Klopfer91 Klopfer91 ist offline Mitglied
    Registriert seit
    Nov 2011
    Beiträge
    18
    Moin moin,

    Ich habe folgendes Problem:

    In meinem Programm übergebe ich einer Methode ein Objekt der Klasse Karte.
    In dieser Methode soll überprüft werden ob eine Karte bereits umgedreht ist, und wenn ja, sollen diese beiden verglichen werden.

    Klappt wunderbar, bis auf eine Stelle:
    Code :
    1
    2
    3
    4
    5
    
    if(!letzteKarte)  //prüfen ob letzte karte null ist
            {
                letzteKarte = karte;
                return;
            }
    Das klappt genau 1 Mal, denn ich weiß nicht, wie ich den Zeiger wieder leer kriege, ohne das Objekt zu löschen.
    Also kein
    Code :
    1
    
    delete letzteKarte;

    Weiß jemand rat?
     

  2. #2
    Avatar von sheel
    sheel sheel ist offline Moderator
    tutorials.de Moderator
    Registriert seit
    Jul 2007
    Beiträge
    4.504
    Hi

    was haben denn die Karten für einen Variablentyp?
    Und wie werden die zwei Instanzen erzeugt?
    Bitte genau so, wie es im Code steht.
     
    Netiquette (vA §15) und Nutzungsregeln (vA §4.8) einhalten! Programmcode in Codetags/Codeboxen.
    Sehr gute Beiträge bitte Bewerten (Stern darunter oder "Danke").
    "Funktioniert nicht" ist zu ungenau! Code, Fehlermeldungen, Verhalten des Programms, ...?

  3. #3
    Klopfer91 Klopfer91 ist offline Mitglied
    Registriert seit
    Nov 2011
    Beiträge
    18
    Aaalso:
    Meine zeiger:
    Code :
    1
    2
    
    Karte^ letzteKarte; //die Karte, die gerade umgedreht wurde
            Karte^ letzteKarte2; //Hilfsvariabel
    Meine Karten Klasse:
    Code :
    1
    
    public ref class Karte : System::Windows::Forms::PictureBox
    Konstruktor:
    Code :
    1
    2
    
    public:
            Karte(int index, int x, int y);
    Instanzierung der Karten:
    Code :
    1
    
    Karte^ karte = gcnew Karte(intListe[randomint], x, y);


    Das ganze wird mit der Methode aufgerufen:
    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    
    void Memorie::bildGedrueckt(Karte^ karte)
    {
        if(!warten)
        {
            karte->umdrehen();
            if(!letzteKarte)  //prüfen ob letzte karte null ist
            {
                letzteKarte = karte;
                return;
            }
            if(letzteKarte->index == karte->index)
            {
                gefundenePaare++;
                //letzteKarte = 0; //letzte Karte null setzen
                Karte^ letzteKarte;
            }
            else
            {
                warten = true;
                timer->Start();
                letzteKarte2 = karte;
            }
        }
    }

    Der zeiger letzteKarte soll wieder in den Zustand gebracht werden, wie er war bevor das erste mal Zeile 8 der Methode aufgerufen worden wurde.
     

  4. #4
    Avatar von sheel
    sheel sheel ist offline Moderator
    tutorials.de Moderator
    Registriert seit
    Jul 2007
    Beiträge
    4.504
    Also...
    a) Du weist letzteKarte eine karte zu (Karte 1).
    Für diese Karte gibts noch irgendwo eine andere Variable x.
    b) Du weist letzteKarte eine andere karte zu (Karte 2),
    willst aber nicht, dass Karte 1 aus der anderen Variable x verschwindet?

    Dann war es schon von Anfang an richtig.
    delete gibts in .NET sowieso nicht, das macht der GarbageCollector.
    Ein Objekt wird erst dann gelöscht, wenn es dazu keine einzige Vaiable mehr gibt.

    Gruß
    Klopfer91 bedankt sich. 
    Netiquette (vA §15) und Nutzungsregeln (vA §4.8) einhalten! Programmcode in Codetags/Codeboxen.
    Sehr gute Beiträge bitte Bewerten (Stern darunter oder "Danke").
    "Funktioniert nicht" ist zu ungenau! Code, Fehlermeldungen, Verhalten des Programms, ...?

  5. #5
    Avatar von Nico Graichen
    Nico Graichen Nico Graichen ist offline aka gemballa
    tutorials.de Moderator
    Registriert seit
    Dec 2003
    Ort
    Pulheim (NRW)
    Beiträge
    3.898
    Blog-Einträge
    34
    Ohne es jetzt auszuprobieren (a) zu faul b) keine Compiler hier):
    Aber in C# würde man "letzteKarte" einfach auf null setzen!
    Code csharp:
    1
    
    letzteKarte = null;
     
    Grüße Nico
    ----------------------
    Xing
    ----------------------
    Zitat Zitat von Mark Twain (1835-1910)
    Es gibt drei Dinge, die eine Frau aus dem Nichts hervorzaubern kann: einen Hut, einen Salat und einen Ehekrach.
    Zitat Zitat von Mike Wilson - Biographie über Larry Ellison (CEO Oracle)
    The Difference Between God and Larry Ellison: God Doesn't Think He's Larry Ellison

  6. #6
    MCoder MCoder ist offline Mitglied Diamant
    tutorials.de Premium-User
    Registriert seit
    Jul 2005
    Ort
    München
    Beiträge
    2.448
    Dafür gibt es bei C++/CLI das Schlüsselwort nullptr:
    Code cpp:
    1
    
    letzteKarte = nullptr;
    Gruß
    MCoder
    Klopfer91 bedankt sich. 
    "The three chief virtues of a programmer are: Laziness, Impatience and Hubris."
    --- Larry Wall

  7. #7
    deepthroat deepthroat ist offline Mitglied Diamant
    tutorials.de Premium-User
    Registriert seit
    Jun 2005
    Beiträge
    8.168
    Hi.
    Zitat Zitat von sheel Beitrag anzeigen
    delete gibts in .NET sowieso nicht, das macht der GarbageCollector.
    Das ist für C++/CLI nicht korrekt. Man darf/kann/sollte direkt delete für "managed" Objekte aufrufen (was dann zum Aufruf der Dispose Methode führt).

    Gruß
    Klopfer91 bedankt sich. 
    If at first you don't succeed, try again. Then quit. No use being a damn fool about it.

  8. #8
    Klopfer91 Klopfer91 ist offline Mitglied
    Registriert seit
    Nov 2011
    Beiträge
    18
    Zitat Zitat von MCoder Beitrag anzeigen
    Dafür gibt es bei C++/CLI das Schlüsselwort nullptr:
    Code cpp:
    1
    
    letzteKarte = nullptr;
    Gruß
    MCoder
    Genau DAS hab ich gesucht.
    Vielen Dank dafür!!
     

Ähnliche Themen

  1. AS 3 --> Callback-Fkt. und Null-Pointer ?
    Von Skid im Forum Flash Plattform
    Antworten: 2
    Letzter Beitrag: 27.07.10, 23:17
  2. Object Null pointer exeption
    Von Dingoman im Forum Java Grundlagen
    Antworten: 8
    Letzter Beitrag: 16.12.09, 20:13
  3. Problem mit Pointer und NULL-Zeichen
    Von Newtonianer im Forum C/C++
    Antworten: 8
    Letzter Beitrag: 16.03.09, 20:32
  4. [c++] Pointer auf konstanten Pointer-Parameter setzen
    Von digitalFreeman im Forum C/C++
    Antworten: 4
    Letzter Beitrag: 18.02.09, 11:11
  5. mysql Klasse Null Pointer Acces
    Von GarGod im Forum Java
    Antworten: 1
    Letzter Beitrag: 17.10.08, 08:15