Du bist nicht angemeldet.

Werbeanzeige

C--

Alter Hase

  • »C--« ist der Autor dieses Themas

Beiträge: 465

Beruf: Schüler

  • Private Nachricht senden

1

26.06.2009, 22:45

Problem mit Konstruktoren, Destruktoren und Operatoren

Ich habe ein Problem.
Ich habe ein Problem. Ich habe vor eine Bibliothek für Mathe-Funktionen zu schreiben, in der u.a. die Klasse CPunkt2DInt ist. Sie soll 2D-Koordinaten verwalten und ich bekomme beim Kompilieren 4 Fehler:

Fehler 1 error C2804: Binärer Operator '+' hat zu viele Parameter cpunkt2dint.hpp 49
Fehler 2 error C2804: Binärer Operator '-' hat zu viele Parameter cpunkt2dint.hpp 54
Fehler 3 error C2533: 'CPunkt2DInt::{ctor}': Ergebnistyp für Konstruktoren nicht zulässig cpunkt2dint.cpp 9
Fehler 4 error C2264: 'CPunkt2DInt::CPunkt2DInt': Fehler in der Funktionsdefinition oder Funktionsdeklaration, Funktion nicht aufgerufen cpunkt2dint.cpp 15

Hier sind die Dateien:

CPunkt2DInt.hpp:

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
// CPunkt2DInt.hpp

// Header für CPunkt2DInt.cpp

//

class CPunkt2DInt
{
    //

    // Private-Sektion

    //

    private: //

             // Membervariable für die X-Koordinate

             //

             signed int _X;
             //

             // Membervariable für die Y-Koordiante

             //

             signed int _Y;
             //

    //

    // Public-Sektion

    //

    public: //

            // Konstruktor für CPunkt2DInt

            // Parameter x: Die X-Koordinate für den zu ersteelenden CPunkt2DInt

            // Parameter y: Die Y-Koordinate für den zu erstellenden CPunkt2DInt

            //

            CPunkt2DInt(signed int x, signed int y);
            //

            // Eigenschaft X zu _X

            //

            
            // Operator + Addiert zwei CPunkt2DInt-Variablen komponentenasiert

            // P1->X + P2->X; P1->Y + P2->Y;

            //

            CPunkt2DInt operator+(CPunkt2DInt P1, CPunkt2DInt P2);
            //

            // Operator - Subtrahiert ein CPunkt2DInt von einem anderen komponentenbasiert

            // P1->X - P2->; P1->Y - P2->Y;

            //

            CPunkt2DInt operator-(CPunkt2DInt P1, CPunkt2DInt P2);
            //

}


Und hier der Code für CPunkt2DInt.cpp:

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
// CPunkt2DInt.cpp aus TK_Mathe_Lib32

// Implementierung zu CPunkt2DInt.hpp

// Für weitere Erklärungen siehe Header-Datei(CPunkt2DInt.hpp)

//

#include "CPunkt2DInt.hpp"
//

// Implementierung von CPunkt2DInt::CPunkt2DInt

//

CPunkt2DInt::CPunkt2DInt(signed int x, signed int y) { _X = x; _Y = y;}
//

// Implementierung von +(CPunkt2DInt, CPunkt2DInt)

//

CPunkt2DInt CPunkt2DInt::operator +(CPunkt2DInt P1, CPunkt2DInt P2)
{
    return CPunkt2DInt(0,0);
}


Hoffentlich kann mir jemand helfen, ich bin ein Anfänger und ziemlich verzweifelt...!!!
Ich spreche: C/C++, C++/CLI C#, VBA, VB.NET, Delphi, (HTML, Javascript(bisschen))
------------------------------------------------------------
Hier steht eventuell schon in ein paar Monaten der Link zu meiner Homepage!

return 0;
;)

n0_0ne

1x Contest-Sieger

  • Private Nachricht senden

2

26.06.2009, 22:50

Ist eigentlich ziemlich klar, + und - sind nunmal 2 stellige Operatoren. er braucht also zwei parameter, einer davon ist automatisch dein object... zwei punkte auf einen punkt zu addieren ist auch irgendwie blödsinnig... das geht genau so gut auch in zwei schritten ^^

C--

Alter Hase

  • »C--« ist der Autor dieses Themas

Beiträge: 465

Beruf: Schüler

  • Private Nachricht senden

3

26.06.2009, 22:54

Danke!

Gut, da ich ja ein Anfänger bin, möchte ich noch generell wissen, wie man Operatoren deklariert. Ich steig da nicht durch. Danke, ich finde es übrigens toll, dass es hier so schnell Hilfe gibt...
Ich spreche: C/C++, C++/CLI C#, VBA, VB.NET, Delphi, (HTML, Javascript(bisschen))
------------------------------------------------------------
Hier steht eventuell schon in ein paar Monaten der Link zu meiner Homepage!

return 0;
;)

dot

Supermoderator

Beiträge: 9 684

Wohnort: Graz

  • Private Nachricht senden

4

26.06.2009, 23:11

Du hasts fast richtig gemacht ;)

Generell hast du 2 Möglichkeiten einen binären Operator zu deklarieren:

1) Als Member:

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
class vector
{
public:

  int x;
  int y;

  vector(int _x, int _y)
    : x(_x), y(_y)
  {
  }

  vector operator +(const vector& a) const
  {
    return vector(x + a.x, y + a.y);
  }
};


2) Als freie Funktion:

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
class vector
{
public:

  int x;
  int y;

  vector(int _x, int _y)
    : x(_x), y(_y)
  {
  }
};


inline vector operator +(const vector& a, const vector& b)
{
  return vector(a.x + b.x, a.y + b.y);
}

C--

Alter Hase

  • »C--« ist der Autor dieses Themas

Beiträge: 465

Beruf: Schüler

  • Private Nachricht senden

5

26.06.2009, 23:16

Danke, jetzt weiß ich wie man Operatoren deklariert! Gut, ich kenn Operatoren nur aus VB, und da werden sie anders deklariert...

Noch ne Frage: Ich habe ja auch Fehler mit Konstruktor(Irgendwas mit Rückgabetyp falsch(oder verstehe ich was falsch??)). Ich dachte immer Konstruktoren dürfen Keinen Rückggabetyp haben??! :oops:

Fehler 3 error C2533: 'CPunkt2DInt::{ctor}': Ergebnistyp für Konstruktoren nicht zulässig cpunkt2dint.cpp 9
Fehler 4 error C2264: 'CPunkt2DInt::CPunkt2DInt': Fehler in der Funktionsdefinition oder Funktionsdeklaration, Funktion nicht aufgerufen cpunkt2dint.cpp 15
Ich spreche: C/C++, C++/CLI C#, VBA, VB.NET, Delphi, (HTML, Javascript(bisschen))
------------------------------------------------------------
Hier steht eventuell schon in ein paar Monaten der Link zu meiner Homepage!

return 0;
;)

6

27.06.2009, 01:11

da fehlt nen Semikolon in Zeile ... öhm... CPunkt2DInt.hpp ganz am Ende.

dot

Supermoderator

Beiträge: 9 684

Wohnort: Graz

  • Private Nachricht senden

7

27.06.2009, 01:17

Jo, nach ner Deklaration muss immer ein ; kommen:

C-/C++-Quelltext

1
2
3
4
class blub
{

};  // <-- here

C--

Alter Hase

  • »C--« ist der Autor dieses Themas

Beiträge: 465

Beruf: Schüler

  • Private Nachricht senden

8

27.06.2009, 07:49

:oops: Das wusste ich nicht, habs korrigiert und jetzt hab ich keine Fehler mehr! Das war meine erste selbsgeschriebene Klasse und ich wusste nur, dass man Funktions- und Variablendeklarationen mit ";" Abschließen muss.

return 0; :D
Ich spreche: C/C++, C++/CLI C#, VBA, VB.NET, Delphi, (HTML, Javascript(bisschen))
------------------------------------------------------------
Hier steht eventuell schon in ein paar Monaten der Link zu meiner Homepage!

return 0;
;)

9

27.06.2009, 15:46

Dann stell ich mir die Frage: Bringst du dir C++ selbst bei ohne irgendwelche Hilfen? Oder nutzt du ein Buch/Tutorial? (Da müsste es drinstehen)

dot

Supermoderator

Beiträge: 9 684

Wohnort: Graz

  • Private Nachricht senden

10

27.06.2009, 16:03

Zitat von »"C--"«

:oops: Das wusste ich nicht, habs korrigiert und jetzt hab ich keine Fehler mehr! Das war meine erste selbsgeschriebene Klasse und ich wusste nur, dass man Funktions- und Variablendeklarationen mit ";" Abschließen muss.


Das kann man ausdehnen auf: Jede Deklaration wird in C++ mit einem ; abgeschlossen.
Klassendeklarationen natürlich inklusive. ;)

Werbeanzeige