Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

franz-21

Treue Seele

  • »franz-21« ist der Autor dieses Themas

Beiträge: 101

Wohnort: Bayern

Beruf: Schüler

  • Private Nachricht senden

1

19.02.2010, 14:13

error C2274

Hallo Leute, bei diesen Code müsste eigentlich alles stimmen, schmeist mir aber trotzdem einen Fehler raus.

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
42
43
44
45
46
47
48
49
50
51
#include <iostream>
#include <string>
#include <sstream>
#include <conio.h>


using namespace std;

class CPunkt{

    private:
        int m_x;
        int m_y;

    public:
        CPunkt(int x, int y);
        CPunkt();
        //void setx();

        //void sety();

        //void toString();

            

};

CPunkt::CPunkt(int x, int y){

    m_x=x;
    m_y=y;
    cout<<"Konstruktor mit Parameter aufgerufen"<<endl;
}

CPunkt::CPunkt(){

    m_x=0;
    m_y=0;
    cout<<"Konstruktor ohne Parameter aufgerufen"<<endl;
}

void main(){
    
    int x=5;
    int y=7;

    CPunkt Eins;

    
    Eins.CPunkt();      //Funktionsformatsumwandlung': Unzulässig auf der rechten Seite des Operators '.'

    Eins.CPunkt(x,y);  //Funktionsformatsumwandlung': Unzulässig auf der rechten Seite des Operators '.'


    _getch();
}


Wo ist der Fehler, den es nicht gibt???

drakon

Supermoderator

Beiträge: 6 513

Wohnort: Schweiz

Beruf: Entrepreneur

  • Private Nachricht senden

2

19.02.2010, 14:16

Konstruktoren werden nur einmal aufgerufen und zwar implizit wenn du das Objekt erstellst.

Die kannst du nicht einfach so aufrufen.

franz-21

Treue Seele

  • »franz-21« ist der Autor dieses Themas

Beiträge: 101

Wohnort: Bayern

Beruf: Schüler

  • Private Nachricht senden

3

19.02.2010, 14:21

upps, weis schon was falsch ist, muss es mit new machen.
thx

So muss es aussehen:

C-/C++-Quelltext

1
2
3
4
5
6
7
CPunkt *pSpieler=NULL;
    CPunkt *pGegner=NULL;
    int x=5;
    int y=7;

    pSpieler = new CPunkt;
    pGegner = new CPunkt(x, y);


oder so:

C-/C++-Quelltext

1
2
   CPunkt Eins;
    CPunkt Eins1(x,y);

franz-21

Treue Seele

  • »franz-21« ist der Autor dieses Themas

Beiträge: 101

Wohnort: Bayern

Beruf: Schüler

  • Private Nachricht senden

4

19.02.2010, 14:38

Wieso habe ich auf m_x und m_y in der Memberfunktion toString keinen Zugriff?

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
using namespace std;

class CPunkt{

    private:
        int m_x;
        int m_y;

    public:
        CPunkt(int x, int y);
        CPunkt();
        void setx();
        void sety();
        void toString();
            

};

void toString(){

    string sString1 ("X= ");
    string sString2 ("Y= ");
    string sStringx;
    string sStringy;

    ostringstream temp;
    temp << m_x;
    sStringx=temp.str();
    temp << m_y;
    sStringy=temp.str();

    cout<<sString1<<sStringy<<endl;
    cout<<sString2<<sStringx<<endl;
}

5

19.02.2010, 14:43

Zitat von »"franz-21"«

Wieso habe ich auf m_x und m_y in der Memberfunktion toString keinen Zugriff?


Weil der Compiler nicht "weiß", dass die Definition von toString zu der Deklaration von toString in CPunkt gehört.

C-/C++-Quelltext

1
2
3
void CPunkt::toString(){
bla
}

so müsste es funktionieren.

6

19.02.2010, 14:47

Zitat von »"franz-21"«

So muss es aussehen:

C-/C++-Quelltext

1
2
3
4
5
6
7
CPunkt *pSpieler=NULL;
    CPunkt *pGegner=NULL;
    int x=5;
    int y=7;

    pSpieler = new CPunkt;
    pGegner = new CPunkt(x, y);
Hier aber die entsprechenden deletes nicht vergessen! Wenn du Objekte gerade so gut automatisch anfordern kannst, solltest du das tun (oder evtl. Smart-Pointer benutzen).

franz-21

Treue Seele

  • »franz-21« ist der Autor dieses Themas

Beiträge: 101

Wohnort: Bayern

Beruf: Schüler

  • Private Nachricht senden

7

19.02.2010, 14:47

Ach du heilige sch... :) ich glaube das ich es für Heute lasse, vl nur bis zum Abend. Anscheinend hat mich gestern das mit dem "Instanz ans Ende eines Arrays geben" ziemlich blöd im Kopf gemacht. :(

thx
mfg

8

19.02.2010, 15:47

Das mit den Arrays hat mich auch fertig gemacht 2 Stunden Verzweiflung wegen eines fehlenden Konstruktors :D

Werbeanzeige