tutorials.de Buch-Aktion 05/2012
ERLEDIGT
JA
ANTWORTEN
5
ZUGRIFFE
177
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    Ladnaks Ladnaks ist offline Mitglied
    Registriert seit
    Jul 2009
    Beiträge
    15
    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 :
    1
    2
    3
    4
    5
    6
    
    class Entry
    {
    public:
        Entry();
        virtual void test();
    };

    ...und eine Klasse SpecialEntry die von Entry erbt.
    Code :
    1
    2
    3
    4
    5
    6
    
    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 :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    
    ...
    #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 :
    1
    2
    3
    4
    
    .....
    SpecialEntry se;
    se.test();
    ....

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

    Weiß jemand was ich da tun kann?
    Geändert von Ladnaks (05.10.11 um 21:11 Uhr)
     

  2. #2
    Avatar von ComFreek
    ComFreek ComFreek ist offline [x] Let it be logic!
    tutorials.de Moderator
    Registriert seit
    Jun 2009
    Beiträge
    2.358
    Blog-Einträge
    4
    Kann es sein, dass du die Datei zweimal einbindest?

    Schreibe mal in die Header-Dateien folgendes:
    Code cpp:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    
    #ifndef __ENTRY_H__
    #define __ENTRY_H__
     
    // Dein eigtl. Code
     
    #endif
    // -----------------------------
    #ifndef __SPECENTRY_H__
    #define __SPECENTRY_H__
     
    // Dein eigtl. Code
     
    #endif
     
    mfg ComFreek

    Falls ich dir geholfen habe, würde ich mich über ein DANKE freuen!
    Kenn mich am besten aus in C++, WEB-Sprachen (PHP, HTML, JavaScript) und vllt. mehr
    [PHP] Überprüfen, ob Website erreichbarSicherheit in PHP-Codes schaffenGoogle Chrome-Extension für tutorials.dejson_compress()

  3. #3
    deepthroat deepthroat ist offline Mitglied Diamant
    tutorials.de Premium-User
    Registriert seit
    Jun 2005
    Beiträge
    8.168
    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ß
     
    If at first you don't succeed, try again. Then quit. No use being a damn fool about it.

  4. #4
    Ladnaks Ladnaks ist offline Mitglied
    Registriert seit
    Jul 2009
    Beiträge
    15
    @ComFreek
    So habe ich es bereits
    @deepthroat
    Nein, in der Header Datei steht keine Implementierung. Hier mal die gesamte Header Datei:
    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    
    #ifndef ENTRY_H
    #define ENTRY_H
     
    #include <QString>
    #include <iostream>
     
    class Entry
    {
    public:
        Entry();
        virtual void test();
    };
     
    #endif // ENTRY_H

    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    
    #ifndef SPECIALENTRY_H
    #define SPECIALENTRY_H
     
    #include <entry.h>
     
    class SpecialEntry : public Entry
    {
    public:
        SpecialEntry();
        void test();
    };
     
    #endif // SPECIALENTRY_H
    Geändert von Ladnaks (05.10.11 um 22:18 Uhr)
     

  5. #5
    deepthroat deepthroat ist offline Mitglied Diamant
    tutorials.de Premium-User
    Registriert seit
    Jun 2005
    Beiträge
    8.168
    Interessanter wäre eigentlich die Stelle wo du die test Methoden implementierst.

    Und die genauen Befehle beim Build und die genaue Fehlermeldung.
     
    If at first you don't succeed, try again. Then quit. No use being a damn fool about it.

  6. #6
    Ladnaks Ladnaks ist offline Mitglied
    Registriert seit
    Jul 2009
    Beiträge
    15
    Ich habs jetzt gefunden. Das war ein unglaublich dummer Fehler. Ich hatte in SpecialEntry Entry::test() statt SpecialEntry::test() geschrieben.
     

Ähnliche Themen

  1. Antworten: 4
    Letzter Beitrag: 07.03.11, 23:05
  2. [c++] Code::Blocks: multiple definition
    Von ComFreek im Forum C/C++
    Antworten: 7
    Letzter Beitrag: 10.05.10, 18:12
  3. Array Definition Problem
    Von dobermant im Forum PHP
    Antworten: 6
    Letzter Beitrag: 30.07.08, 13:51
  4. Antworten: 3
    Letzter Beitrag: 21.09.07, 23:53
  5. "multiple definition"
    Von DeChecka im Forum C/C++
    Antworten: 4
    Letzter Beitrag: 22.06.05, 19:37