variable aus **argv initialisieren in einem static int
-
Tim schrieb:
Wäre nicht die einfachste Lösung anstatt schwachsinnig von int main(argc,argv) zu nutzen ein eigenes in der Klasse zu erstellen
?Falls du noch ein paar Objekte in deinen Satz einfügst, kann man vielleicht sogar verstehen, was du wissen möchtest.
-
Entschuldige ich wurde von Freunden zum Döner futtern abgeholt und hab nicht nachgelesen was ich da vorhin getippt habe.
Aber ich hab immerhin eine freudige Nachricht.Ich hab mein Problem selbstständig gelößt.
#ifndef DATABASE_H_INCLUDED #define DATABASE_H_INCLUDED #include <sqlite3.h> #include <iostream> using namespace std; class database{ private: int argc; char* argv[]; sqlite3 *db; char *zErrMsg = 0; int rc; char *sql; const char* data = "Callback function called"; public: // database(sqlite3 *wusch){db = wusch;}; static int callback(void *data, int argc, char **argv, char **azColName){ int i; // cout << "CALLBACK FUNKTION AUFGERUFEN\n"; for(i=0; i<argc; i++){ cout << azColName[i] << " = " << argv[i] << "\n"; } cout << "\n"; return 0; } void open_database(){ rc = sqlite3_open("test.db", &db); if( rc ){ cout << "Datenbank kann nicht geöffnet werden: " << sqlite3_errmsg(db); }else{ cout << "Datenbank wurde erfolgreich geöffnet\n"; } } void select(){ sql = "SELECT * from Serien"; /* Execute SQL statement */ rc = sqlite3_exec(db, sql, callback, (void*)data, &zErrMsg); if( rc != SQLITE_OK ){ cout << "SQL error: " << zErrMsg << "\n"; sqlite3_free(zErrMsg); }else{ cout << "Operation wurde erfolgreich ausgeführt\n"; } } void count(){ sql = "SELECT count(*) FROM Serien"; /* Execute SQL statement */ rc = sqlite3_exec(db, sql, callback, (void*)data, &zErrMsg); if( rc != SQLITE_OK ){ cout << "SQL error: " << zErrMsg << "\n"; sqlite3_free(zErrMsg); }else{ cout << "Operation wurde erfolgreich ausgeführt\n"; } } }; #endif // DATABASE_H_INCLUDEDDas ist zu 100% nicht perfekt aber es funktioniert

-
Naja "gelöst" ist da wohl relativ. Du hast einfach den schwierigen Teil weggelöscht.
-
Bashar schrieb:
Naja "gelöst" ist da wohl relativ. Du hast einfach den schwierigen Teil weggelöscht.
Das ist wahr aber mir war einfach nicht klar wie unnützt schwer ich es mir vor ner Woche gemacht habe.
-
Stimmt, könnte ja sein, dass man aus Versehen was lernt.

-
An Zeile 29 merk ich. Ich hab immer noch das selbe Problem

Peinlich peinlich von mir.Ich lese jetzt zur Sicherheit nochmal nach wofür Static steht auch, wenn ich nicht glaube das mir das weiter hilft.
#ifndef DATABASE_H_INCLUDED #define DATABASE_H_INCLUDED #include <sqlite3.h> #include <iostream> using namespace std; class database{ private: int argc; char* argv[]; sqlite3 *db; char *zErrMsg = 0; int rc; char *sql; const char* data = "Callback function called"; int dusche; public: // database(sqlite3 *wusch){db = wusch;}; static int callback(void *data, int argc, char **argv, char **azColName){ int i; // cout << "CALLBACK FUNKTION AUFGERUFEN\n"; for(i=0; i<argc; i++){ cout << azColName[i] << " = " << argv[i] << "\n"; } dusche = 33; cout << "\n"; return 0; } void open_database(){ rc = sqlite3_open("test.db", &db); if( rc ){ cout << "Datenbank kann nicht geöffnet werden: " << sqlite3_errmsg(db); }else{ cout << "Datenbank wurde erfolgreich geöffnet\n"; } } void select(){ sql = "SELECT * from Serien"; /* Execute SQL statement */ rc = sqlite3_exec(db, sql, callback, (void*)data, &zErrMsg); if( rc != SQLITE_OK ){ cout << "SQL error: " << zErrMsg << "\n"; sqlite3_free(zErrMsg); }else{ cout << "Operation wurde erfolgreich ausgeführt\n"; } } void count(){ sql = "SELECT count(*) FROM Serien"; /* Execute SQL statement */ rc = sqlite3_exec(db, sql, callback, (void*)data, &zErrMsg); if( rc != SQLITE_OK ){ cout << "SQL error: " << zErrMsg << "\n"; sqlite3_free(zErrMsg); }else{ cout << "Operation wurde erfolgreich ausgeführt\n"; } } }; #endif // DATABASE_H_INCLUDED
-
Hab leider nichts neues für mich aus meinem Buch+Google über Static erfahren.
Ich weiß nur eines.
Ich hab kein Plan wieso ich in der Ccallback Funktion keine Variable aus private oder public ansprechen kann. Was für ein Weg gibt es das Ergebnis von Ccallback in eine Variable zu speichern?Zeile 42 <---
#ifndef DATABASE_H_INCLUDED #define DATABASE_H_INCLUDED #include <sqlite3.h> #include <iostream> #include <stdlib.h> using namespace std; class database{ private: int argc; char* argv[]; sqlite3 *db; char *zErrMsg = 0; int rc; char *sql; const char* data = "Callback function called"; int domian; public: // database(sqlite3 *wusch){db = wusch;}; static int callback(void *data, int argc, char **argv, char **azColName){ int i; // cout << "CALLBACK FUNKTION AUFGERUFEN\n"; for(i=0; i<argc; i++){ cout << azColName[i] << " = " << argv[i] << "\n"; } cout << "\n"; return 0; } static int Ccallback(void *data, int argc, char **argv, char **azColName){ int i; // cout << "CALLBACK FUNKTION AUFGERUFEN\n"; for(i=0; i<argc; i++){ cout << azColName[i] << " = " << argv[i] << "\n"; } cout << "\n"; domian = atoi(argv[0]); return 0; } void open_database(){ rc = sqlite3_open("test.db", &db); if( rc ){ cout << "Datenbank kann nicht geöffnet werden: " << sqlite3_errmsg(db); }else{ cout << "Datenbank wurde erfolgreich geöffnet\n"; } } void select(){ sql = "SELECT * from Serien"; /* Execute SQL statement */ rc = sqlite3_exec(db, sql, callback, (void*)data, &zErrMsg); if( rc != SQLITE_OK ){ cout << "SQL error: " << zErrMsg << "\n"; sqlite3_free(zErrMsg); }else{ cout << "Operation wurde erfolgreich ausgeführt\n"; } } void count(){ sql = "SELECT count(*) FROM Serien"; /* Execute SQL statement */ rc = sqlite3_exec(db, sql, Ccallback, (void*)data, &zErrMsg); if( rc != SQLITE_OK ){ cout << "SQL error: " << zErrMsg << "\n"; sqlite3_free(zErrMsg); }else{ cout << "Operation wurde erfolgreich ausgeführt\n"; } } void get_domian(){ cout << "\nDOMIAN: " << domian; } }; #endif // DATABASE_H_INCLUDED
-
Tim schrieb:
Hab leider nichts neues für mich aus meinem Buch+Google über Static erfahren.
Was hast du denn erfahren? static hat in C++ so ca. 5 verschiedene Bedeutungen, von denen dich gerade die für Membervariablen und Memberfunktionen interessiert. Das wesentliche über static weißt du, wenn du diese Frage beantworten kannst:
[...] wieso ich in der Ccallback Funktion keine Variable aus private oder public ansprechen kann.
-
Bashar schrieb:
Tim schrieb:
Hab leider nichts neues für mich aus meinem Buch+Google über Static erfahren.
Was hast du denn erfahren? static hat in C++ so ca. 5 verschiedene Bedeutungen, von denen dich gerade die für Membervariablen und Memberfunktionen interessiert. Das wesentliche über static weißt du, wenn du diese Frage beantworten kannst:
[...] wieso ich in der Ccallback Funktion keine Variable aus private oder public ansprechen kann.
Naja wenn ich Static vor ner Variable oder Funktion schreibe kann ich die nur in der selben Datei ansprechen.
Und bei Static Varibalen bzw. Funktionen wo man ein Static vorne dran schreibt bleibt die Variabel/Rückgabewert erhalten.
#include <iostream> using namespace std; int counter(void); int main() { counter(); counter(); counter(); int dumm; dumm = counter(); cout << "dumm ist: " << dumm; return 0; } int counter(void){ static int ival; cout << "ival : " << ival << endl; ++ival; return ival; }
-
Ja, diese Bedeutungen von static gibt es auch. Wie gesagt, 5.
-
Bashar schrieb:
Ja, diese Bedeutungen von static gibt es auch. Wie gesagt, 5.
Wie soll ich sowas den jetzt aufzählen am Ende fehlt doch eh noch irgendwas xD
Mach ich mal weiter fsosfjfiosjiogjiogioggigsggo0main.cpp
#include <iostream> #include "ichbinweiblich.h" using namespace std; int sagtesmirdocheinfach::ival=0; int main() { cout << sagtesmirdocheinfach::langweilig(); // 1 cout << sagtesmirdocheinfach::langweilig(); cout << sagtesmirdocheinfach::langweilig(); sagtesmirdocheinfach googlenutzerwuerdeneseuchdanken; googlenutzerwuerdeneseuchdanken.get_ival(); googlenutzerwuerdeneseuchdanken.get_ival(); cout << endl << sagtesmirdocheinfach::return_ival(); //2 // ka was ich noch nicht erwähnt habe return 0; }ichbinweiblich.h
#ifndef ICHBINWEIBLICH_H_INCLUDED #define ICHBINWEIBLICH_H_INCLUDED #include <iostream> using namespace std; class sagtesmirdocheinfach{ public: sagtesmirdocheinfach(){ ival++; }; static int langweilig(){return ival;} void get_ival(){ cout << ival << endl; } static int return_ival(){ return ival; } private: static int ival; }; #endif // ICHBINWEIBLICH_H_INCLUDED
-
Die Fehlermeldung zu Zeile 8 macht für mich keinen Sinn.
/home/cseipel/Code::Blocks Kram/GTK/test project/datenbankexperiment/main.cpp|8|error: invalid use of qualified-name ‘database::ival’|
||=== Build failed: 1 error(s), 2 warning(s) (0 minute(s), 0 second(s)) ===|main.cpp
#include <iostream> #include "database.h" using namespace std; int main() { cout << "Hello world!" << endl; int Ddatabase::ival=0; // int database::domian=0; // int sagtesmirdocheinfach::ival=0; Ddatabase anime; anime.open_database(); anime.select(); anime.count(); // anime.get_domian(); // anime.insert(); return 0; }database.h
#ifndef DATABASE_H_INCLUDED #define DATABASE_H_INCLUDED #include <sqlite3.h> #include <iostream> #include <stdlib.h> using namespace std; class Ddatabase{ private: int argc; char* argv[]; sqlite3 *db; char *zErrMsg = 0; int rc; char *sql; const char* data = "Callback function called"; static int ival; public: Ddatabase(){ ival++; }; static int langweilig(){return ival;} // sagtesmirdocheinfach(){ ival++; }; // database(sqlite3 *wusch){db = wusch;}; static int callback(void *data, int argc, char **argv, char **azColName){ int i; // cout << "CALLBACK FUNKTION AUFGERUFEN\n"; for(i=0; i<argc; i++){ cout << azColName[i] << " = " << argv[i] << "\n"; } cout << "\n"; return 0; } static int Ccallback(void *data, int argc, char **argv, char **azColName){ int i; // cout << "CALLBACK FUNKTION AUFGERUFEN\n"; for(i=0; i<argc; i++){ cout << azColName[i] << " = " << argv[i] << "\n"; } cout << "\n"; return 0; } void open_database(){ rc = sqlite3_open("test.db", &db); if( rc ){ cout << "Datenbank kann nicht geöffnet werden: " << sqlite3_errmsg(db); }else{ cout << "Datenbank wurde erfolgreich geöffnet\n"; } } void select(){ sql = "SELECT * from Serien"; /* Execute SQL statement */ rc = sqlite3_exec(db, sql, callback, (void*)data, &zErrMsg); if( rc != SQLITE_OK ){ cout << "SQL error: " << zErrMsg << "\n"; sqlite3_free(zErrMsg); }else{ cout << "Operation wurde erfolgreich ausgeführt\n"; } } void count(){ sql = "SELECT count(*) FROM Serien"; /* Execute SQL statement */ rc = sqlite3_exec(db, sql, Ccallback, (void*)data, &zErrMsg); if( rc != SQLITE_OK ){ cout << "SQL error: " << zErrMsg << "\n"; sqlite3_free(zErrMsg); }else{ cout << "Operation wurde erfolgreich ausgeführt\n"; } } /* void get_domian(){ cout << "\nDOMIAN: " << domian; } */ }; #endif // DATABASE_H_INCLUDED
-
Tim schrieb:
Die Fehlermeldung zu Zeile 8 macht für mich keinen Sinn.
/home/cseipel/Code::Blocks Kram/GTK/test project/datenbankexperiment/main.cpp|8|error: invalid use of qualified-name ‘database::ival’|
||=== Build failed: 1 error(s), 2 warning(s) (0 minute(s), 0 second(s)) ===|Wieso? Du versuchst quasi eine globale Variable lokal in einer Funktion zu definieren. Das kann doch nicht gehen.
Die Definition eines statischen Klassenmembers gehört in den globalen Gültigkeitsbereich. Mach noch eine database.cpp, definier dort die Variable, Link das Ergebnis zum Gesamtprogramm.
Den Rest des Codes habe ich mir jetzt nicht angesehen.
-
Tim schrieb:
Bashar schrieb:
Ja, diese Bedeutungen von static gibt es auch. Wie gesagt, 5.
Wie soll ich sowas den jetzt aufzählen am Ende fehlt doch eh noch irgendwas xD
Mach ich mal weiter fsosfjfiosjiogjiogioggigsggo0main.cpp
#include <iostream> #include "ichbinweiblich.h" using namespace std; int sagtesmirdocheinfach::ival=0; int main() { cout << sagtesmirdocheinfach::langweilig(); // 1 cout << sagtesmirdocheinfach::langweilig(); cout << sagtesmirdocheinfach::langweilig(); sagtesmirdocheinfach googlenutzerwuerdeneseuchdanken; googlenutzerwuerdeneseuchdanken.get_ival(); googlenutzerwuerdeneseuchdanken.get_ival(); cout << endl << sagtesmirdocheinfach::return_ival(); //2 // ka was ich noch nicht erwähnt habe return 0; }ichbinweiblich.h
#ifndef ICHBINWEIBLICH_H_INCLUDED #define ICHBINWEIBLICH_H_INCLUDED #include <iostream> using namespace std; class sagtesmirdocheinfach{ public: sagtesmirdocheinfach(){ ival++; }; static int langweilig(){return ival;} void get_ival(){ cout << ival << endl; } static int return_ival(){ return ival; } private: static int ival; }; #endif // ICHBINWEIBLICH_H_INCLUDEDrofl, made my day.
-
SeppJ schrieb:
Tim schrieb:
Die Fehlermeldung zu Zeile 8 macht für mich keinen Sinn.
/home/cseipel/Code::Blocks Kram/GTK/test project/datenbankexperiment/main.cpp|8|error: invalid use of qualified-name ‘database::ival’|
||=== Build failed: 1 error(s), 2 warning(s) (0 minute(s), 0 second(s)) ===|Wieso? Du versuchst quasi eine globale Variable lokal in einer Funktion zu definieren. Das kann doch nicht gehen.
Die Definition eines statischen Klassenmembers gehört in den globalen Gültigkeitsbereich. Mach noch eine database.cpp, definier dort die Variable, Link das Ergebnis zum Gesamtprogramm.
Den Rest des Codes habe ich mir jetzt nicht angesehen.
Das hab ich mir Heute Vormittag auch gedacht als ich wieder auf den Code geguckt habe
Jetzt funktioniert der Mist mal endlich wirklich. Ich hoffe dieser Thread geht in die Geschichte des Forums ein!!!!!! Mal ganz abgesehn davon das ich echt froh bin das der Mist den ich hier unfreiwillig verzapft habe "relativ" anonym ist.