8
votes

Erreur avec `qobject` constructeur de sous-classe et de copie:` QObject :: QOBJECT (Const QObject &) est privé`

Les erreurs de compilation suivantes sont ce que j'ai:

#include <string>
using std::string;

#include "Product.h"

Product::Product()
{
    seller = "";
    itemName = "";
    price = 0.00;
    min = 0.00;
    buyingPrice = 0.00;
    time = 0;
    description = "";
    highestBidder = "None";
    currentBid = 0.00;
}

void Product::setHandler(Handler *h)
{
    handler = h;
}


0 commentaires

3 Réponses :


2
votes

On Line 574 Vous essayez de transmettre l'un de ces éléments à la fonction de produitsDétails. Vous ne le montrez pas, mais j'imagine que cette fonction prend une valeur. Donc, le compilateur tente de créer un tout nouvel objet pour le transmettre, mais cela n'est pas autorisé par la bibliothèque, qui a intentionnellement défini le constructeur de copie pour être privé.

Faites un nouvel objet explicitement ou corrigez la fonction appelée.


0 commentaires

4
votes

La copie n'est pas autorisée pour les descendants QObject ...

voir http://lists.trolltech.com/ QT-Intérêt / 2001-02 / THIP00123-0.HTML

Votre fonction de produits () prend son paramètre par valeur, en effectuant une copie nécessaire. Changez-le pour prendre une référence Const.


0 commentaires

23
votes

produit est une sous-classe de QObject , qui ne peut pas être copiée. Votre code tente de le copier quelque part (peut-être dans productdétails (Temproducteur) ) et cela provoque l'erreur. Peut-être que vous pourriez le transmettre à votre fonction par const référence à la place; ou peut-être que certains refonte de votre programme sont nécessaires.

Votre compilateur vous indique que le constructeur de copie de qObject est privé, il ne peut donc pas être appelé par une fonction qui n'est pas une méthode de la classe de base. Qt l'a conçu pour fonctionner de cette façon.

Une raison pour laquelle QT désactive la copie de QObject S est qu'il gère la mémoire des enfants d'un qObject . Quand un qObject est supprimé, de même que tous ses enfants. Ce serait peu pratique de faire correctement si le qObject était copieux.


1 commentaires

Merci pour l'explication concise - cela m'a tout simplement sauvé beaucoup de temps. (Je passais de la valeur, pas de référence dans une fente pour ceux qui arrivent à cela)