while ((a=b.foo())!=NULL)....
-
Hallo,
ich programmiere mir gerade eine kleine Datenbankklasse für MySQL unter wxWidgets. Ich bin auf ein Problem gestoßen, bei dem ich gerade nicht weiß wo ich nachschalgen muss um einen Ansatz für ne Lösung zu finden.
Ich würde gerne folgendes machen:
//...irgendwo im Quelltext... { wxMySQLSelect q(_("testtabelle")); // Macht einen "SELECT * FROM testtabell; q.makequery(); // Führt den Querys aus und macht alles nötige wxMySQLRes a; while ((a=q.nextLine())!=NULL) // Hier: liefere ein wxMySQLRes oder NULL { // Gib am Bildschirm aus was du findest.... } // .... }Das das ganze in wxWidgets steht ist nur Nebensache. Mein Problem liegt am (a=q.nextLine())!=NULL.
Ich hab in meiner Funktion eingebaut:
wxMySQLRes wxMySQLSelect::nextLine() { //...viel Code.... MYSQL_ROW row; row=mysql_fetch_row(res); if (row==NULL) { return (wxMySQLRes)NULL; } //...verarbeite die Daten zum wxMySQLRes return (wxMySQLRes)(die verarbeiteten Daten); }Wenn ich allerdings jetzt meinen g++ anschmeiße, dann bekomme ich die Meldung
error: could not convert 'a.wxMySQLSelect::operator=((const wxMySQLRes&)((const wxMySQLRes*)(& wxMySQLSelect::nextLine()()))))' to 'bool'Ok, ich hab dann nachgeschaut und müsste jetzt den Operator == und != überladen. Hab ich versucht mit
bool operator == (const wxMySQLSelect& op2) const {return false};Das steht natürlich in meiner Klasse. Einfach mal "return false" damit ich sehe ob er die Funktion überhaupt findet. Ich hatte schon vermutet was dann eingetreten ist, der Type (const wxMySQLSelect& op2) passt nicht.
Jetzt bin ich am Ende mit meinem Latein. Ich würde gerne die Funktion nextLine() so lange aufrufen, bis keine Daten mehr vorhanden sind (also NULL), damit ich das in einer while-Schlrife abarbeiten kann.
Wie muss ich das machen? Wer hat einen Denkanstoß für mich?Danke,
Stefan
-
Deine Funktion nextLine gibt doch garkeinen Zeiger zurück. Wie soll sie dann den Zeiger 0 zurückgeben können?
Eine Möglichkeit wäre, der Klasse einen Operator zu spendieren, der einen boolschen Wert zurückgibt (operator void* oder besser: Google safe bool idiom). Dann kannst Du folgendes machen:
while (a = q.nextLine()) { }
-
Ich glaub auch ich hab die richtige Seite im Internet gefunden:
http://www.artima.com/cppsource/safebool.html
Allerdings bin ich wohl noch zu viel Anfänger um das Umsetzen zu können. Auf gut Deutsch: Ich kapiers nicht so richtig.Daher werd ich mir wohl ne andere Lösung suchen müssen.
Danke trotzdem,
Stefan
-
Ich lasse so ungerne Themen offen, daher zumindest mein Weg, der momentan hilft:
wxMySQLSelect::nextLine() { //...viel Code... wxMySQLRes givback; MYSQL_ROW row; row=mysql_fetch_row(res); if (row==NULL) { return givback; } //..verarbeitung return givback; } //...irgendwo im Code { wxMySQLRes resi; wxMySQLSelect q(_T("testtabelle")); q.makeQuery(); do { resi=q.nextLine(); if (!resi.empty()) { //...Gib die Daten am Bildschirm aus. } } while (!resi.empty()); } q.makefree();Ist jetzt auch mit While, hat aber zweimal die Prüfung drinnen ob Daten beinhaltet sind. Kurz vielleicht noch die Anmerkung: wxMySQKRes ist eine Hash-Map von wxWidgets.
Gruß,
Stefan