Seite 1 von 2

Undefinierter Fehler

Verfasst: 2. Februar 2010 10:35
von baba
Hallo Commune nich bin es noch einmal.

Ich habe mehrere Fehlermeldungen die auf das gleiche Problem schließen lassen. Allerdings habe ich das Problem das ich nicht weiter weiß.


Fehler: Typ »QMainWindow« ist keine direkte Basis von »MainWindow«
Fehler: keine passende Funktion für Aufruf von »Ui::MainWindow::setupUi(MainWindow* const)«
Anmerkung: Kandidaten sind: void Ui_MainWindow::setupUi(QMainWindow*)
Fehler: Elementfunktion »virtual void QWidget::changeEvent(QEvent*)« kann nicht ohne Objekt aufgerufen werden
Fehler: keine passende Funktion für Aufruf von »Ui::MainWindow::retranslateUi(MainWindow* const)«
Anmerkung: Kandidaten sind: void Ui_MainWindow::retranslateUi(QMainWindow*)
Main.cpp
#include <QtGui/QApplication>
#include "mainwindow.h"

int main(int argc, char *argv[])
{
QApplication a(argc, argv);
MainWindow w;
w.show();
return a.exec();
}
Mainwindow.cpp
#include "mainwindow.h"
#include "ui_mainwindow.h"

MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
}

MainWindow::~MainWindow()
{
delete ui;
}

void MainWindow::changeEvent(QEvent *e)
{
QMainWindow::changeEvent(e);
switch (e->type()) {
case QEvent::LanguageChange:
ui->retranslateUi(this);
break;
default:
break;
}
}
Mainwindow.h
#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QMainWindow>
#include <QMap>
#include <QWidget>
#include <QMessageBox>

namespace Ui {
class MainWindow;
}

class MainWindow : public QWidget {
Q_OBJECT
public:
MainWindow(QWidget *parent = 0);
~MainWindow();

public slots:
void addContact();
void submitContact();
void cancel();

protected:
void changeEvent(QEvent *e);


private:
Ui::MainWindow *ui;

QMap<QString, QString> contacts;
QString oldName;
QString oldAddress;
};

#endif // MAINWINDOW_H
Adressbuch.pro
#-------------------------------------------------
#
# Project created by QtCreator 2010-02-02T09:28:26
#
#-------------------------------------------------

TARGET = Adressbuch
TEMPLATE = app


SOURCES += main.cpp\
mainwindow.cpp

HEADERS += mainwindow.h

FORMS += mainwindow.ui
Ich hoffe mir kann jemand weiter helfen.
Mfg Marvin[/quote]

Verfasst: 2. Februar 2010 10:39
von AuE
Was solls denn werden? Nen MainWindow oder ein Widget?

Das was du das hast sieht aus als war es mal was anderes..... Hier mal nen Snippet wie ein MainWindow Header ausschaut:

Code: Alles auswählen

class MainWindow : public QMainWindow {
    Q_OBJECT
public:
    MainWindow(QWidget *parent = 0);

Verfasst: 2. Februar 2010 10:43
von baba
Okay danke schön ich habe das jetzt geändert allerdings bekomme ich neue Fehlermeldungen..
undefined reference to `MainWindow::addContact()'
undefined reference to `MainWindow::submitContact()'
undefined reference to `MainWindow::cancel()'
:-1: error: collect2: ld gab 1 als Ende-Status zurück
Mfg Marvin

Verfasst: 2. Februar 2010 10:45
von AuE
ist auch logisch wenn die net in der cpp datei sind :-)

Net dasd der Thread in die Grundlagen geht ;-)

Verfasst: 2. Februar 2010 10:48
von baba
Es wäre nett wenn wir das hier mal in die Grundlagen einflisen lassen würden. Habe zwar C++ Kenntnisse aber kenne erst seit gestern Mittag QT ;).

Ich kapiere einfach nicht wo und wie das in die CPP rein soll.

Mfg Marvin

//Edit2 My foul. Wusste nicht das hier auch QT besprochen wird ;)

Verfasst: 2. Februar 2010 11:40
von baba
Nunja die Funktionen musste einfach nur aufgerufen werden auch ohne Inhalt. Trotzdem danke für die nicht vorhandende Bereitschaft eine 5 Sekunden Antwort zu erstellen..

Verfasst: 2. Februar 2010 12:16
von upsala
Du hast innerhalb von 10min. 2 passende Antworten erhalten. Was willst du eigentlich?

Verfasst: 2. Februar 2010 12:54
von baba
Mich regt das auf das er anstatt sowas einfaches in 2 Sätzen zu erläutern den Topic verschiebt. Desweiteren wird in diesem Forum so oft zu Google geraten das ich Kotzen könne. Es ist total übertrieben wie man in einer Stunde Forum lesen so einen Groll gegen eine Commune hegen kann.
Aber keine Bange ich werde hier kein neues Thema mehr starten.

Mfg Marvin.

Verfasst: 2. Februar 2010 13:13
von erpheus
Hi baba,

dass dieser Thread verschoben ist schon richtig. Denk drann, dass ein Admin mehr zu tun hat als nur Threads zu verschieben. Aber ich würd sagen wir lassen das Thema einfach mal da man dies eh nicht zu ende Diskutieren kann und dies ein Problem aller Foren im Netz ist.

Zu Deinem Problem:
Du hast im Header die Slots/Funktionen

Code: Alles auswählen

public slots: 
void addContact(); 
void submitContact(); 
void cancel(); 
definiert. Damit das ganze funktioniert musst Du diese Zwingend in der cpp implementieren. Also:

Code: Alles auswählen

MainWindow::addContact(){}
MainWindow::submitContact(){}
MainWindow::canel(){}
Nur zur Info, ich denk du siehst, dass dies eine C++Regel ist und nichts mit Qt zu tun hat, daher wurde dein Thread verschoben.

Von mir aus frag in diesem Forum ruhig weiterhin.

Grüße erpheus

Verfasst: 2. Februar 2010 13:42
von baba
Auch wenn das jetzt auch nett war bleibe ich bei meiner Meinung im Bezug auf andere. Übrigens ist es ja so das ich bei Cpp nur darauf hingewiesen werde das ich dich Funktionen nicht nutze. Daher hängt es in meinen Augen immer noch vom QT Designer ab. Aber darüber wollen wir uns nicht streiten.

Mfg Marvin.

Verfasst: 2. Februar 2010 13:46
von Christian81
Wenn ich Funktionen in der Klasse deklariere und benutze muss ich sie auch implementieren. Fertig.
Und das sind definitiv simpelste Grundlagen... :roll:

Verfasst: 2. Februar 2010 13:56
von baba
Und schon meldet sich einer der Gründe warum ich hier nicht weiter Posten werden. Ich glaube Ironie hieß das. Und nein ich musste unter c++ noch nie benutzen was ich deklariert habe -.-

Mfg Marvin

Verfasst: 2. Februar 2010 14:37
von erpheus
Versuch doch mal folgendes Programm zu übersetzen

Header:

Code: Alles auswählen

class Doof
{
public:
 void Doof();
 void brauchIchNicht();
};
cpp1:

Code: Alles auswählen

#include "Doof.h"

Doof::Doof()
{
}
main:

Code: Alles auswählen

int main()
{
Doof bloed;
return 0;
}
Wie Du siehst ist kein Qt enthaltenund das Programm lässt sich nicht übersetzen da folgendes im cpp fehlt:

Code: Alles auswählen

Doof:brauchIchNicht()
{
}
Also bitte halt Dich ein bischen zurück. Wenn Du hier nicht mehr posten willst, ist das Deine Sache. Es wird immer Leute geben die Dich angreifen weil sie genervt sind, warum auch immer.
Wenn Du damit nicht klar kommst ist das dein Problem und hat meiner Meinung nach hier nichts im Forum zu suchen.

Trotzdem werd ich hier weiter posten und Leuten wie dir Helfen. Warum nur?

Verfasst: 2. Februar 2010 16:59
von AuE
Wuha .. wenn ich gewusst hätte was ich mit der Äusserung lostrete hätte ich Sie stecken lassen :-)

Das war auch net abwertend gemeint nur ich geh arbeiten und mache das hier nebenher. Wenn ich mehr Zeit hier rein stecke freut das meinen AG sicher net da er mir nen haufen Kohle zahlt - aber sicher net hierfür.

Von daher sie es net böse an - ich schrieb das die dinger net im cpp sind ... sry falls ich dich da dumm angemacht haben sollte-aber für mich deuten die Smileys darauf hin das das net so gemeint war!

Verfasst: 3. Februar 2010 08:16
von franzf
@erpheus:
Wenn schon solche "aggressiven" Beispiele: dann bitte richtig!

Code: Alles auswählen

In file included from doof.cpp:1:
doof.h:4: Fehler: Angabe des Rückgabetyps für Konstruktor ist ungültig
main.cpp: In function »int main()«:
main.cpp:3: Fehler: »Doof« wurde in diesem Gültigkeitsbereich nicht definiert
main.cpp:3: Fehler: expected »;« before »bloed«
Das passiert wenn man dein Beispiel übernimmt und versucht zu kompilieren.

1) Fehlt das #include "doof.h" in main.cpp.
2) Konstruktor kennt keinen Rückgabetyp!

Dann machen wir mal...
Und - oh Wunder! Es kompiliert! Woran liegt das? Doof::brauchIchNicht() wird nirgends verwendet, darum kann es auch beim Linken zu keiner undefined reference kommen.

Dann versuchen wir das doch mal - in der main() einen Funktionsaufruf einbauen -> undefined reference, wunderbar.
Dann deinen "patch" eingespielt:

Code: Alles auswählen

doof.cpp:7: Fehler: expected unqualified-id before »:« token
Huch, was ist jetzt los?!?
Findest du deinen Fehler? Tip: bei der Definition von Doof::brauchIchNicht() ein Doppelpunkt zu wenig.

Dann kommt als nächstes noch das Problem mit vergessenem void als Rückgabetyp bei der Definition von Doof::brauchIchNicht()...

Also BITTE beim nächsten mal, wenn dein Post (und dein Ton) die gravierenden Schwächen deines Gegenübers bloßstellen sollen ein Beispiel posten, welches 1) tatsächlich den Fehler des Betroffenen wiederspiegelt und 2) selber fehlerfrei ist! Sonst ist niemandem geholfen!


Schönen Tag im Schneechaos
Franz