Hallo,
bin gerade dabei, ein weiteres Tutorial zu machen. Folgende Fehlermeldung kommt, wenn ich versuche, ein Objekt einer Klasse zu bilden:
error C2664: '__thiscall FindFormImpl::FindFormImpl(const class FindFormImpl &)' : cannot convert parameter 1 from 'class ColorMainWindowImpl *const ' to 'const class FindFormImpl &'
Reason: cannot convert from 'class ColorMainWindowImpl *const ' to 'const class FindFormImpl'
No constructor could take the source type, or constructor overload resolution was ambiguous
Hier die Klasse im Header:
class FindFormImpl : public FindForm
{
Q_OBJECT
signals:
lookfor(const QString&);
public:
FindFormImpl( QWidget* parent, const char* name, bool modal, WFlags fl )
: FindForm( parent, name, modal, fl ){};
Hier der Aufruf:
void ColorMainWindowImpl::editFind()
{
FindFormImpl *findForm;
findForm = 0;
if ( ! findForm ) {
findForm = new FindFormImpl(this);
connect( findForm, SIGNAL( lookfor(const QString&) ),
this, SLOT( lookfor(const QString&) ) );
}
findForm->show();
}
FindFormImpl ist die abgeleitete klasse von FindForm (ist mein Fenster in Designer) und in die ich meine Funktionen, wie lookfor schreibe.
Der Fehler liegt ja anscheinend irgendwo in
findForm = new FindFormImpl(this);
bzw. im Konstruktor, den ich aber ja immer so gebildet habe und der ja mit FindForm auch funktioniert. FindFormImpl ist aber von FindForm ja abgeleitet, dann müssten die ja auch identisch sein, oder?
Wenn ich den Code mit FindForm, anstatt FindFormImpl aufrufe, läuft er, dann kann ich natürlich nicht meine eigenen Funktionen aus meinen VC++ Dateien benutzen.
Fehlersuche
-
FlorianBecker
- Beiträge: 1213
- Registriert: 2. Dezember 2004 10:54
- Kontaktdaten:
Mh, ein Tutorial????
Aha, also der Fehler ist einfach, this übergibt die gerade verwendete Klasse, also bei findForm = new FindFormImpl(this); ist this=ColorMainWindowImpl, geht nicht, weil Sie weder von FindFormImpl noch von der generellen Klasse abgeleitet ist.
Desweitern folgende Dinge:
1.
FindFormImpl( QWidget* parent, const char* name, bool modal, WFlags fl )
: FindForm( parent, name, modal, fl ){};
Mh, das kann nicht sein!!! Entweder Strichpunkt, oder im Header...
2.
FindFormImpl *findForm;
findForm = 0;
if ( ! findForm ) {
Mh, was soll das? Also wenn du schon sowas machst, dann
FindFormImpl *findForm = 0;
Und if ( !findForm) ist immer false, d.h. es ist unnütz. Wie wäre denn:
FingFormImp *findForm = new FindFormImpl(...)???
3.
connect( findForm, SIGNAL( lookfor(const QString&) ),
this, SLOT( lookfor(const QString&) ) );
Mh, der Slot heißt genauso wie das Signal? Ist ein wenig verwirrend?
Also ich will dir wirklich nicht zu nahe treten, aber sollte man nicht vielleicht kein Tutorial schreiben? Denn falsch, bzw. extrem fehlerhafte Tuts bringen sehr viele Leute ganz schnell wieder ab von Qt.
Aha, also der Fehler ist einfach, this übergibt die gerade verwendete Klasse, also bei findForm = new FindFormImpl(this); ist this=ColorMainWindowImpl, geht nicht, weil Sie weder von FindFormImpl noch von der generellen Klasse abgeleitet ist.
Desweitern folgende Dinge:
1.
FindFormImpl( QWidget* parent, const char* name, bool modal, WFlags fl )
: FindForm( parent, name, modal, fl ){};
Mh, das kann nicht sein!!! Entweder Strichpunkt, oder im Header...
2.
FindFormImpl *findForm;
findForm = 0;
if ( ! findForm ) {
Mh, was soll das? Also wenn du schon sowas machst, dann
FindFormImpl *findForm = 0;
Und if ( !findForm) ist immer false, d.h. es ist unnütz. Wie wäre denn:
FingFormImp *findForm = new FindFormImpl(...)???
3.
connect( findForm, SIGNAL( lookfor(const QString&) ),
this, SLOT( lookfor(const QString&) ) );
Mh, der Slot heißt genauso wie das Signal? Ist ein wenig verwirrend?
Also ich will dir wirklich nicht zu nahe treten, aber sollte man nicht vielleicht kein Tutorial schreiben? Denn falsch, bzw. extrem fehlerhafte Tuts bringen sehr viele Leute ganz schnell wieder ab von Qt.
Hallo, danke erstmal. Ich schreibe kein Tutorial, ich mache eines und wie Du siehst, zu recht! 
Der Fehler lag einfach in dem Aufruf mit THIS. Richtig war:
findForm = new FindFormImpl(this, "", TRUE, 0);
Der restliche Code stammt eigentlich 1:1 aus Qt Assistant (Tutorial Color). Und ja, der obere Teil kam aus meinem Header-File.
Danke für die Mühe!!!
Der Fehler lag einfach in dem Aufruf mit THIS. Richtig war:
findForm = new FindFormImpl(this, "", TRUE, 0);
Der restliche Code stammt eigentlich 1:1 aus Qt Assistant (Tutorial Color). Und ja, der obere Teil kam aus meinem Header-File.
Danke für die Mühe!!!
-
FlorianBecker
- Beiträge: 1213
- Registriert: 2. Dezember 2004 10:54
- Kontaktdaten: