Fehler mit `QObject` Unterklasse und copy-Konstruktor: `QObject::QObject(const QObject&) von privat`
Die folgenden Fehlermeldungen kompilieren ist was ich habe:
/usr/lib/qt-3.3/include/qobject.h: In copy constructor Product::Product(const Product&):
/usr/lib/qt-3.3/include/qobject.h:211: error: QObject::QObject(const QObject&) is private
Product.h:20: error: within this context
HandleTCPClient.cpp: In member function int Handler::HandleTCPClient(int, std::string, std::string):
HandleTCPClient.cpp:574: note: synthesized method Product::Product(const Product&) first required here
HandleTCPClient.cpp:574: error: initializing argument 1 of std::string productDetails(Product)
/usr/lib/qt-3.3/include/qobject.h: In member function Product& Product::operator=(const Product&):
Product.h:20: instantiated from void std::vector<_Tp, _Alloc>::_M_insert_aux(__gnu_cxx::__normal_iterator<typename std::_Vector_base<_Tp, _Alloc>::_Tp_alloc_type::pointer, std::vector<_Tp, _Alloc> >, const _Tp&) [with _Tp = Product, _Alloc = std::allocator<Product>]
/usr/lib/gcc/i386-redhat-linux/4.1.2/../../../../include/c++/4.1.2/bits/stl_vector.h:610: instantiated from âvoid std::vector<_Tp, _Alloc>::push_back(const _Tp&) [with _Tp = Product, _Alloc = std::allocator<Product>]â
HandleTCPClient.cpp:173: instantiated from here
/usr/lib/qt-3.3/include/qobject.h:212: error: QObject& QObject::operator=(const QObject&) is private
Product.h:20: error: within this context
/usr/lib/gcc/i386-redhat-linux/4.1.2/../../../../include/c++/4.1.2/bits/vector.tcc: In member function void std::vector<_Tp, _Alloc>::_M_insert_aux(__gnu_cxx::__normal_iterator<typename std::_Vector_base<_Tp, _Alloc>::_Tp_alloc_type::pointer, std::vector<_Tp, _Alloc> >, const _Tp&) [with _Tp = Product, _Alloc = std::allocator<Product>]:
/usr/lib/gcc/i386-redhat-linux/4.1.2/../../../../include/c++/4.1.2/bits/vector.tcc:260: note: synthesized method âProduct& Product::operator=(const Product&) first required here
make: *** [HandleTCPClient.o] Error 1
Teil meiner HandleTCPClient.cpp Linie 574:
Product tempProduct;//temporary Product storage variable
tempProduct.setHandler(this);
...
else if (output[1] == '5') //description
{
output.erase(0,2); //erase the sequence numbers
tempProduct.description = output;
LINE 574 output = productDetails(tempProduct); //obtain client given information about selling product
}
Produkt.h::
#include <string>
#include <qtimer.h>
#include "HandleTCPClient.h"
#ifndef PRODUCT_H
#define PRODUCT_H
#include <qobject.h>
#include <qgl.h>
class Handler;
//Define ourselves a product class
class Product : public QObject
{
Q_OBJECT
void startTimer();
public:
Product();
string seller, itemName, description, highestBidder;
double price, min, buyingPrice, currentBid;
int time;
bool isSold;
Handler *handler;
void setHandler(Handler *h);
public slots:
void setProductToSold();
};
#endif
Product.cpp::
#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;
}
Danke für die Hilfe =)
Du musst angemeldet sein, um einen Kommentar abzugeben.
Product
ist eine Unterklasse vonQObject
, die nicht kopiert werden kann. Ihr code versucht wird, kopieren es irgendwo (vielleicht inproductDetails(tempProduct)
) und das verursacht den Fehler. Vielleicht könnten Sie übergeben es an Ihre Funktion, die von const-Referenz statt; oder vielleicht einige Umgestaltung des Programms notwendig ist.Dein compiler sagt Ihnen, dass der copy-Konstruktor von
QObject
ist private, kann also nicht aufgerufen werden, indem Sie jede Funktion, die nicht die Methode der Basisklasse. Qt hat es entworfen, um zu arbeiten, Weg.Einer der Gründe, warum Qt deaktiviert kopieren von
QObject
s ist, dass es ihm gelingt die Erinnerung an die Kinder einQObject
. Wenn einQObject
gelöscht wird, so haben alle seine Kinder. Dies wäre unpraktisch, zu tun korrekt, wenn dieQObject
war kopierbar.Kopieren ist nicht erlaubt für QObject Nachkommen...
Sehen http://lists.trolltech.com/qt-interest/2001-02/thread00123-0.html
Ihre productDetails () - Funktion nimmt den parameter durch einen Wert, der Erstellung einer Kopie erforderlich. Ändern Sie es zu nehmen eine const-Referenz statt.
On line 574 Sie versuchen, übergeben Sie eines dieser Elemente auf der productDetails-Funktion. Sie zeigen nicht es, aber ich kann mir vorstellen, dass diese Funktion entweder einen Wert entgegennimmt. So wird der compiler versuchen, um eine BRANDNEUE Objekt, um es zu übergeben, aber das ist nicht erlaubt, die Bibliothek, die hat absichtlich den copy-Konstruktor private.
Machen ein neues Objekt explizit, oder fix die aufgerufene Funktion.