Problem beim Linking
-
Hi
Ich lerne schon seit längerem C++, habe zwischendurch aufgehört, weil mir die Lust fehlte. Nahc langer Pause stieg ich dann wieder ein. Ich wiedehrolte alle Sachen mit dem eBook von C++ in 21 Tagen. Als ich dann eine Übung abschloss kam der fehler:.
main.obj : error LNK2005: "public: class cSimpleCircle & __thiscall cSimpleCircle::operator++(void)" (??EcSimpleCircle@@QAEAAV0@XZ) already defined in simplecircle.obj
main.obj : error LNK2005: "public: class cSimpleCircle __thiscall cSimpleCircle::operator++(int)" (??EcSimpleCircle@@QAE?AV0@H@Z) already defined in simplecircle.obj
main.obj : error LNK2005: "public: __thiscall cSimpleCircle::cSimpleCircle(void)" (??0cSimpleCircle@@QAE@XZ) already defined in simplecircle.obj
main.obj : error LNK2005: "public: __thiscall cSimpleCircle::cSimpleCircle(int)" (??0cSimpleCircle@@QAE@H@Z) already defined in simplecircle.obj
main.obj : error LNK2005: "public: __thiscall cSimpleCircle::~cSimpleCircle(void)" (??1cSimpleCircle@@QAE@XZ) already defined in simplecircle.obj
main.obj : error LNK2005: "public: __thiscall cSimpleCircle::cSimpleCircle(class cSimpleCircle &)" (??0cSimpleCircle@@QAE@AAV0@@Z) already defined in simplecircle.obj
main.obj : error LNK2005: "public: class cSimpleCircle & __thiscall cSimpleCircle::operator=(class cSimpleCircle &)" (??4cSimpleCircle@@QAEAAV0@AAV0@@Z) already defined in simplecircle.obj
D:\Eigene Dateien\Tobias\Visual Studio 2008\Projects\Überladung von Operatoren - Aufgaben\Debug\Überladung von Operatoren - Aufgaben.exe : fatal error LNK1169: one or more multiply defined symbols foundDie Klassendeklaration:
class cSimpleCircle { private: int *itsRadius; public: int getRadius () const { return *itsRadius; } void setRadius (int radius) { *itsRadius = radius;} cSimpleCircle () ; cSimpleCircle (int radius); cSimpleCircle (cSimpleCircle&); ~cSimpleCircle (); cSimpleCircle& operator++(); cSimpleCircle operator++(int); cSimpleCircle& operator=(cSimpleCircle&); };Definition:
#include "simplecircle.h" cSimpleCircle& cSimpleCircle ::operator ++() { ++(*itsRadius); return *this; } cSimpleCircle cSimpleCircle::operator ++(int) { cSimpleCircle temp(*this); ++(*itsRadius); return temp; } cSimpleCircle::cSimpleCircle() { itsRadius = new int; *itsRadius = 5; } cSimpleCircle::cSimpleCircle(int radius) { itsRadius = new int; *itsRadius = radius; } cSimpleCircle::~cSimpleCircle() { delete itsRadius; itsRadius = 0; } cSimpleCircle::cSimpleCircle(cSimpleCircle& rhs) { itsRadius = new int; *itsRadius = rhs.getRadius(); } cSimpleCircle& cSimpleCircle::operator =(cSimpleCircle & rhs) { if (this == &rhs) return *this; delete itsRadius; itsRadius = new int; *itsRadius = rhs.getRadius(); return *this; }Programmdatei mit int main()
#include "simplecircle.cpp" #include <iostream> using namespace std; int main () { cSimpleCircle yellow; cSimpleCircle green (9); cout << yellow.getRadius() << endl; cout << green.getRadius() << endl; ++green; ++yellow; cout << yellow.getRadius() << endl; cout << green.getRadius() << endl; green = yellow; cout << green.getRadius() << endl; cout << yellow.getRadius() << endl; return 0; }Weiß einer Rat?
Danke im Voraus.
-
#include "simplecircle.cpp"Man bindet nur Headerdateien ein

#include "simplecircle.h"Gruss,
DeSoVoDaMu
-
#if !defined (CIRCLE_H__INCLUDED) #define CIRCLE_H__INCLUDED #if (_MSC_VER >= 1300) #pragma once #endif // (_MSC_VER >= 1300) #include "Shape.h" class Circle : public Shape { double m_radius; public: Circle(double radius = 0.0) : m_radius(radius) {} Circle& operator++() { m_radius += 0.1; if (m_radius >= 360.0) m_radius-= 360; return *this; } public: double get_radius() const { return m_radius; } void set_radius(double radius) { m_radius = std::min<double>(radius, 360.0); } }; #endif // CIRCLE_H__INCLUDEDso ^^
-
Funktioniert danke
