multiple definitions ????



  • Hey nutze wxdev-cpp-c++

    habe folgenden code geschrieben und kenne mich nicht so gut mit klassen und co aus.

    habe immer folgenden fehlermeldungen:

    multiple definition of `dreieck::berechneFlaeche()'
    first defined here

    habe mehrere klassen die jeweils gleichnamige methoden haben.
    geht das nicht? müssen die unterschiedliche namen haben??

    float dreieck::berechneFlaeche(){
    drhoehe=(seiteg/2)*(seiteg/2) + seiteb*seiteb;
    drflaeche= ::std::sqrt(drhoehe) * seiteg /2;
    return drflaeche;
    }
    

    und diese funktion jeweils noch für andere formen und körper....
    weiß jemand wo das problem liegt?



  • Wo steht denn dieser Code? Etwa in einer Headerdatei?



  • Hallo,

    müssen die unterschiedliche namen haben??

    nein, müssen sie nicht:

    #include <iostream>
    
    struct A {
      void foo();
    };
    
    void A::foo() { std::cout<<"A says hello"<<std::endl; };
    
    struct B {
      void foo();
    };
    
    void B::foo() { std::cout<<"B says hello"<<std::endl; };
    
    //...
    A a;
    B b;
    
    a.foo();
    b.foo();
    

    Aber ein bisschen Code im Kontext von dir könnte helfen, denn sonst können wir nur raten.

    MfG

    GPC



  • Dieser Thread wurde von Moderator/in evilissimo aus dem Forum Andere GUIs - Qt, GTK+, wxWidgets in das Forum C++ verschoben.

    Im Zweifelsfall bitte auch folgende Hinweise beachten:
    C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?

    Dieses Posting wurde automatisch erzeugt.



  • so schaut die .cpp datei aus

    //--dreieck.cpp
    #include "dreieck.h"
    #include <cmath>
    
    float drumfang,drflaeche, drhoehe;
    float dreieck::berechneUmfang(){
    drumfang=seiteg+seiteb+seitec;
    return drumfang;
    }
    float dreieck::berechneFlaeche(){
    drhoehe=(seiteg/2)*(seiteg/2) + seiteb*seiteb;
    drflaeche= ::std::sqrt(drhoehe) * seiteg /2;
    return drflaeche;
    }
    void dreieck::setzeSeiten(float a, float s){
    seiteg=a;
    seiteb=s;
    seitec=seiteb;
    }
    

    und so die dazugehörige headerdatei

    class dreieck {
    public:   float dreieck::berechneUmfang();
              float dreieck::berechneFlaeche();
              void dreieck::setzeSeiten(float a, float s);
    private:  float seiteg, seiteb, seitec;
    };
    

    hatte vorher in der headerdatei noch ifndef drin....
    dadran liegts auch nicht...

    und die klasse dreieck ist halt nur eine von vielen



  • erledigt.
    hatte anstatt die h-datei die cpp datei included in dem mainfile.... 😃



  • Inso schrieb:

    class dreieck {
    public:   float dreieck::berechneUmfang();
              float dreieck::berechneFlaeche();
              void dreieck::setzeSeiten(float a, float s);
    private:  float seiteg, seiteb, seitec;
    };
    

    das hier ist trotzdem...komisch, was machen die dreieck:: Bezeichner da vor den Methoden? Braucht man nicht.

    MfG

    GPC



  • Inso schrieb:

    hatte vorher in der headerdatei noch ifndef drin....
    dadran liegts auch nicht...

    Ja, die Include-Guards schützen auch nur davor, daß der Compiler mehrere Definitionen in einer Übersetzungseinheit zu Gesicht bekommt. Dein Fehler stammt daher, daß der Linker mehrere Definitionen erhalten hat (aus verschiedenen Übersetzungseinheiten) - und das verhindert man nur, indem man die Funktionen in eine eigene CPP auslagert.


Anmelden zum Antworten