variable in klasse
-
Möchte das die sql::conn die variablen in den anderen Memberfunktionen aufrufbar sind. Geht das über einen Zeiger oder kann man dort typedev verwenden.

#include <iostream> #include <string> #include <pqxx/connection> #include <pqxx/transaction> #include <pqxx/result> #include "../dblayer.h" #include "pgsql.h" using namespace std; using namespace PGSTD; using namespace pqxx; string sql::conn(string sqloptions) { connection *conn = new connection(sqloptions); work T(*conn); } string sql::dconn() { conn->disconnect(); delete conn; } string sql::query(string sqlquery) { string tmp; result R; R = T.exec(sqlquery); T.commit(); if(R.size() > 0) { R[0]["autor"].to(tmp); } else { cout << "no rows" << endl; tmp = "error"; } return tmp; }
-
Du musst das Objekt T in die Klasse sql packen. Zeiger ist nicht unbedingt erforderlich, geht aber natürlich auch.
-
Tuxist schrieb:
Möchte das die sql::conn die variablen in den anderen Memberfunktionen aufrufbar sind.
Da darfst du die Variablen nicht lokal definieren, sondern als Klassenmember der Klasse sql:
class sql { connection* conn; work worker; public: void conn(const string& sqloptions) { conn = new connection(sqloptions); worker = *conn;//ob die Zeile funktioniert, mußt du die Doku fragen } ... };
-
das problem liegt dabei das die klasse in dblayer.h definiert in diese kann ich nicht postgresql code einfügen globale variablen auch ausserhalb der class datei erstellen ?
-
Tuxist schrieb:
das problem liegt dabei das die klasse in dblayer.h definiert in diese kann ich nicht postgresql code einfügen globale variablen auch ausserhalb der class datei erstellen ?
*semantic underflow error*
-
Also, ich verstehe aus deinem Posting genau soviel:
Der nächste ICE nach München geht um 19:15, oder kurzgesagt Bahnhof.Dein erstes Posting war schon schlecht zu verstehen. Vielleicht solltest du mal genauer Beschreiben was du willst, und warum etwas nicht geht.
Tuxist schrieb:
das problem liegt dabei das die klasse in dblayer.h definiert in diese kann ich nicht postgresql code einfügen globale variablen auch ausserhalb der class datei erstellen ?
"postgresql code" kannst du auch nicht in einen C++ Source einfügen, es muss schon C++ sein ;p. Ich glaube aber es happert bei dir schon mit den Grundlagen Klassen/Member...
cu André
-
schon mal was libpqxx gehört

-
Tuxist schrieb:
schon mal was libpqxx gehört

Ja, am Rande - aber das ist aber auch völlig egal wenn deine Fragen bescheiden formuliert sind. Zudem ist eine Bibliothek für C++ kein Grund warum man keine Membervariablen verwenden kann. Und wenn du auf Teufel komm raus nichts aus der lib im Header verwenden willst kannst du immer noch auf das Handle/Body Idiom (auch pImpl genannt) umsteigen.
cu André
-
Hallo
Vermutlich will Tuxist darauf hinaus das er wenn er T einfach als Member deklariert er es ja im Konstruktor von sql mit initialisieren muß, was aber nur mit einer gültigen Instanz von connection geht.
Dann ist die Antwort : Ja du must mit Pointern arbeiten. Du brauchst genauso wie bei connection einen Pointer als Member, dann kannst du diesem nachträglich die richtige work-Instanz zuweisen. Und nicht vergessen im Destruktor wieder beides zu löschen in der richtigen Reigenfolge.
bis bald
akari