multiple definition Problem bei Vererbung

L

Ladnaks

Ich habe ein Problem beim überschreiben von Methoden. Und zwar meckert der Compiler dann immer wegen multiple definition of bla herum.

Folgendes wollte ich machen:

Ich habe eine Klasse Entry...
Code:
class Entry
{
public:
    Entry();
    virtual void test();
};

...und eine Klasse SpecialEntry die von Entry erbt.
Code:
class SpecialEntry : public Entry
{
public:
    SpecialEntry();
    void test();
};

Die Methode test() soll in SpecialEntry überschrieben werden.


In der Main Klasse wird test nun aufgerufen
Code:
...
#include <entry.h>
#include <specialentry.h>


class MainWindow : public QMainWindow
{
    Q_OBJECT

public:
    explicit MainWindow(QWidget *parent = 0);
    ~MainWindow();

private:
    Entry entry;
    Ui::MainWindow *ui;

};

Code:
.....
SpecialEntry se;
se.test();
....

Der Compiler meint aber immer
error: multiple definition of `Entry::test()'

Weiß jemand was ich da tun kann?
 
Zuletzt bearbeitet von einem Moderator:
Kann es sein, dass du die Datei zweimal einbindest?

Schreibe mal in die Header-Dateien folgendes:
C++:
#ifndef __ENTRY_H__
#define __ENTRY_H__

// Dein eigtl. Code

#endif
// -----------------------------
#ifndef __SPECENTRY_H__
#define __SPECENTRY_H__

// Dein eigtl. Code

#endif
 
Hi.

Mein Vermutung wäre, dass du die Implementierung der Methoden auch in die Headerdatei außerhalb der Klasse geschrieben hast. Das geht so nicht. Du brauchst eine entry.cpp und specialentry.cpp Datei.

Gruß
 
@ComFreek
So habe ich es bereits
@deepthroat
Nein, in der Header Datei steht keine Implementierung. Hier mal die gesamte Header Datei:
Code:
#ifndef ENTRY_H
#define ENTRY_H

#include <QString>
#include <iostream>

class Entry
{
public:
    Entry();
    virtual void test();
};

#endif // ENTRY_H

Code:
#ifndef SPECIALENTRY_H
#define SPECIALENTRY_H

#include <entry.h>

class SpecialEntry : public Entry
{
public:
    SpecialEntry();
    void test();
};

#endif // SPECIALENTRY_H
 
Zuletzt bearbeitet von einem Moderator:
Interessanter wäre eigentlich die Stelle wo du die test Methoden implementierst.

Und die genauen Befehle beim Build und die genaue Fehlermeldung.
 
Ich habs jetzt gefunden. Das war ein unglaublich dummer Fehler. Ich hatte in SpecialEntry Entry::test() statt SpecialEntry::test() geschrieben.
 
Zurück