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 herehabe 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.