Kein Zugriff auf private Member



  • Hallo erstmal,

    ich bekomme immer wieder die selbe Fehlermeldung und weiß nicht mehr weiter:

    Fehler 1 error C2248: "QObject::QObject": Kein Zugriff auf private Member, dessen Deklaration in der QObject-Klasse erfolgte.
    ..\eusfap\eusfap\cursoredconnection.h 29

    Die Objekte der Klasse CursoredConnection werden dann als Elemente in QVector<CursoredConnection> genutzt. Wie kann ich diesen Fehler umgehen?

    Vielen Dank im Voraus.

    Hier ist noch der Code
    cursoredconnection.h

    #ifndef CURSOREDCONNECTION_H
    #define CURSOREDCONNECTION_H
    
    #include <QObject>
    #include <QString.h>
    #include <QSqlQuery.h>
    #include <QSqlDatabase.h>
    
    class CursoredConnection : public QObject
    {
    
    	Q_OBJECT
    	// A T T R I B U T E S
    private:
    	QString command;
    	QSqlQuery dataSet;
    
    	// C O N S T R U C T O R S
    public:
    	CursoredConnection(QObject *parent);
    
    	CursoredConnection(QString command, QSqlDatabase *connection, QObject *parent = 0);
    	~CursoredConnection();
    
    	// M E T H O D E S
    public:
    	int numberOfRows();
    
    };
    
    #endif // CURSOREDCONNECTION_H
    

    Und die cursoredconnection.cpp

    #include "cursoredconnection.h"
    
    CursoredConnection::CursoredConnection(QString command, QSqlDatabase *connection, QObject *parent) : QObject(parent)
    {
    	// Richtiger Constructor
    }
    
    CursoredConnection::~CursoredConnection()
    {
    	// Löschen
    }
    


  • Hmm, mal ins blaue geschossen, da ich QT nicht kenne.

    QObject *parent = 0
    

    ist das erlaubt? Oder besser gesagt, was macht er da genau?

    Dann: Was soll das da?

    Q_OBJECT
    

    Ansonsten machst du ja nicht wirklich was.



    /*...*/
    class CursoredConnection : public QObject 
    { 
    
        Q_OBJECT //wtf? Oo was willst du damit machen/sagen/tun/...?
        // A T T R I B U T E S 
    private: 
    /*...*/
    

    2. [cpp]-Tags sind schöner als Code-Tags für so was ^^

    //edit zu langsam -.-



  • drakon schrieb:

    QObject *parent = 0
    

    ist das erlaubt? Oder besser gesagt, was macht er da genau?

    Warum soll das nicht erlaubt sein (Default)?



  • drakon schrieb:

    QObject *parent = 0
    

    ist das erlaubt? Oder besser gesagt, was macht er da genau?

    Damit setze ich einen Wert für den Fall das der Constructor nur mit 2 Werten bestückt wird per Default auf 0. Das geht auch überall sonst. Und wenn ich es weg nehme hat das auch keinen Einfluss auf das Kompilierverhalten.

    drakon schrieb:

    Dann: Was soll das da?

    Q_OBJECT
    

    Das ist nur ein Makrobefehl der in jeder von QObject abgeleiteten Klasse stehen muss.

    drakon schrieb:

    Ansonsten machst du ja nicht wirklich was.

    Und genau da liegt mein Problem.



  • Sry. Das mit dem Zeiger habe ich nicht richtig geschaut. Dachte du willst einem Objekt 0 zuweisen. 😉

    Hmm, ich würde das jetzt einfach mal so weit vereinfachen, wie es geht. Also eigene Konstruktore/Funktionen/Deklerationen raus. Und dann schauen.
    Oder gleich mal in der Doku nachschauen, ob irgendwas, was du da machst nicht legal ist. Ein Namenskonflikt scheint es ja nicht zu sein.



  • Ruebenthal schrieb:

    drakon schrieb:

    Dann: Was soll das da?

    Q_OBJECT
    

    Das ist nur ein Makrobefehl der in jeder von QObject abgeleiteten Klasse stehen muss.

    nein, muss er nicht. Er muss nur da stehen, wenn du Funktionen nutzen willst, die den MOC benötigen (wie Signals & Slots)

    btw: wenn du Qt4 nutzt, kannst du die header ohne .h angeben. ( <QString> usw)

    versuch mal aber anstatt

    CursoredConnection(QString command, QSqlDatabase *connection, QObject *parent = 0);
    
    CursoredConnection( const QString& command, QSqlDatabase *connection, QObject *parent = 0 );
    

    kA, obs in dem Fall überhaupt relevant ist, aber versuchen kann mans ja ^^



  • Dieser Thread wurde von Moderator/in evilissimo aus dem Forum C++ in das Forum Andere GUIs - Qt, GTK+, wxWidgets verschoben.

    Im Zweifelsfall bitte auch folgende Hinweise beachten:
    C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?

    Dieses Posting wurde automatisch erzeugt.



  • Falls es noch aktuell ist:
    Dein Fehler liegt nich in der Klassendeklaration, da ist alles sauber.
    Dein Fehler liegt aber darin, dass du in deinem QVector<CursoredConnection> deine Objekte per value einsetzen willst. Da der Copy-Constructor von QObject aber private ist, weigert sich der Compiler vollkommen zurecht, dies zu tun.
    Abhilfe: QVector<CursoredConnection*>

    HTH,
    Weilor



  • Weilor schrieb:

    Falls es noch aktuell ist:
    Dein Fehler liegt nich in der Klassendeklaration, da ist alles sauber.
    Dein Fehler liegt aber darin, dass du in deinem QVector<CursoredConnection> deine Objekte per value einsetzen willst. Da der Copy-Constructor von QObject aber private ist, weigert sich der Compiler vollkommen zurecht, dies zu tun.
    Abhilfe: QVector<CursoredConnection*>

    HTH,
    Weilor

    👍 👍

    Ich liebe Leute wie dich,
    super das du trotz des Zweifels, ob der Betrag noch aktuell ist, geantwortet hast.

    Für mich war die Antwort Gold wert!


  • Mod

    Dann aber nicht vergessen die Elemente auch wieder freizugeben...


Anmelden zum Antworten