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 found

    Die 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__INCLUDED
    

    so ^^



  • Funktioniert danke 🙂


Anmelden zum Antworten