Fehler bei der Unterklasse 'QObject' und dem Kopierkonstruktor: 'QObject :: QObject (const QObject &) ist privat'

8

Folgende Kompilierfehler habe ich:

%Vor%

Teil meiner HandleTCPClient.cpp Zeile 574:

%Vor%

Product.h ::

%Vor%

Produkt.cpp ::

%Vor%

Danke für die Hilfe =)

    
Aero Chocolate 22.11.2009, 18:02
quelle

3 Antworten

21

Product ist eine Unterklasse von QObject , die nicht kopiert werden kann. Ihr Code versucht, sie irgendwo zu kopieren (vielleicht in productDetails(tempProduct) ) und dies verursacht den Fehler. Vielleicht könnten Sie es stattdessen durch const reference an Ihre Funktion übergeben; oder vielleicht ist ein Redesign Ihres Programms notwendig.

Ihr Compiler teilt Ihnen mit, dass der Kopierkonstruktor von QObject privat ist und daher nicht von einer Funktion aufgerufen werden kann, die keine Methode der Basisklasse ist. Qt hat es entworfen, um so zu arbeiten.

Ein Grund dafür, dass Qt das Kopieren von QObject s deaktiviert, ist, dass es den Speicher der Kinder eines QObject verwaltet. Wenn ein QObject gelöscht wird, werden alle untergeordneten Elemente gelöscht. Dies wäre unpraktisch, wenn das QObject kopierbar wäre.

    
int3 22.11.2009, 18:12
quelle
4

Kopieren ist nicht erlaubt für QObject Nachkommen ...

Siehe Ссылка

Ihre productDetails () - Funktion nimmt ihren Parameter nach Wert, wodurch eine Kopie erforderlich wird. Ändern Sie es, um stattdessen eine const-Referenz zu verwenden.

    
rep_movsd 22.11.2009 18:12
quelle
2

In Zeile 574 versuchen Sie, eines dieser Elemente an die Funktion productDetails zu übergeben. Sie zeigen es nicht, aber ich stelle mir vor, dass diese Funktion entweder einen Wert annimmt. Der Compiler versucht also, ein brandneues Objekt zu erstellen, um es zu übergeben, aber das ist nicht erlaubt durch die Bibliothek, die absichtlich den Copy-Konstruktor als privat festgelegt hat.

Erstellen Sie ein neues Objekt explizit oder korrigieren Sie die aufgerufene Funktion.

    
bmargulies 22.11.2009 18:11
quelle

Tags und Links