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


Anmelden zum Antworten