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

goldfisch007

Alter Hase

  • »goldfisch007« ist der Autor dieses Themas

Beiträge: 446

Wohnort: Süden von Berlin

  • Private Nachricht senden

1

20.09.2009, 01:09

[C++] Compilerfehler C2664 unter MS VC++ 2008 EE

Hallo leute,

wie man es sich denken kann hab ich ein Problem und das nervt,weil es 6mal in der selbenDatei vorkommt, was sich auf die anzahl der Funktionsaufrufe zurückführen läst.

Ich habe eine Instanz der Klasse CHauptgebaeude namens hauptgebaeude. die Adresse dieser Instanz habe ich so an die folgende Funktion übergeben:

C-/C++-Quelltext

1
Haupthaus.Menue(&Haupthaus);


der prototyp der Funktion Haupthaus.Menue(&Haupthaus) sieht so aus:

C-/C++-Quelltext

1
void Menue (CHaupthaus *pPlayerHaupthaus);

die eigtliche Funktion:

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
void CHaupthaus::Menue(CHaupthaus *pPlayerHaupthaus)
{
    char Auswahl;

    MenueHead();
    std::cout<<" "<<std::endl;
    std::cout<<"(U)pgrade"<<std::endl;
    std::cout<<"(Z)urueck"<<std::endl;
    std::cin>>Auswahl;

    switch(Auswahl)
    {
        case('U'):
        case('u'):
                {
                    this->Upgrade(&pPlayerHaupthaus);
                }break;
        case('Z'):
        case('z'):
                {
                    MainMenue();
                }break;
        default:
                {
                    std::cout<<"Falsche Eingabe!"<<std::endl;
                    this->Menue(&pPlayerHaupthaus);
                }
    };
}



in dieser Funktion Menue() wird dann eine Funktion Upgrade() aufgerufen an die die Adresse von pPlayerHaupthaus weitergegeben wird. Der prototyp ist folgender:

C-/C++-Quelltext

1
void Upgrade (CHaupthaus *pPlayerHaupthaus);


So mein problem: ich bekomme wie oben schon gesagt für jeden Funktionsaufruf von Menue()/Upgrade folgenden Fehler:

Quellcode

1
2
error C2664: 'CHaupthaus::Menue': Konvertierung des Parameters 1 von 'CHaupthaus **' in 'CHaupthaus *' nicht möglich
1>        Die Typen, auf die verwiesen wird, sind nicht verknüpft; die Konvertierung erfordert einen reinterpret_cast-Operator oder eine Typumwandlung im C- oder Funktionsformat.


kann mir da vielleicht nen Tip geben, woran das liegt?
Hab hier schon aml geguckt, über die suche im Forum und ich persönlich glaube nicht, das es an Unicode liegt, oder etwa doch :shock: ?

thx für alle antworten

P.S.:
1. ich hab schon in der MSDN(zum C2664) geguckt, bin daraus aba nicht schlauer geworden
2. wie schon im titel steht: ich verwende MS VC++ 2008 express
Wir bauen auf und reißen nieder, so ham wir Arbeit ima wieder...
--------------------
http://www.piratenpartei.de/tmp/images/Slogans_5_0.png
--------------------
Sei stets geduldig gegenüber Leuten, die nicht mit dir übereinstimmen. Sie haben ein Recht auf ihren Standpunkt - trotz ihrer lächerlichen Meinung. (F. Hollaender, geklaut von Helmut xD)

Toa

Alter Hase

Beiträge: 944

Beruf: Research associate

  • Private Nachricht senden

2

20.09.2009, 01:56

C-/C++-Quelltext

1
this->Menue(&pPlayerHaupthaus); 


Nunja, das ist schon ein Zeiger und deine Funktion erwartet auch nur einen Zeiger. Deswegen brauchst du den Adressoperator auch nicht. Das ist auch der Grund warum die Konvertierung zu ** also zweimalige Dereferenzierung nicht funktioniert.


Lsg:

C-/C++-Quelltext

1
 this->Menue(pPlayerHaupthaus);
[/cpp][/code]

goldfisch007

Alter Hase

  • »goldfisch007« ist der Autor dieses Themas

Beiträge: 446

Wohnort: Süden von Berlin

  • Private Nachricht senden

3

20.09.2009, 12:37

thx
das funzt... :)
Wir bauen auf und reißen nieder, so ham wir Arbeit ima wieder...
--------------------
http://www.piratenpartei.de/tmp/images/Slogans_5_0.png
--------------------
Sei stets geduldig gegenüber Leuten, die nicht mit dir übereinstimmen. Sie haben ein Recht auf ihren Standpunkt - trotz ihrer lächerlichen Meinung. (F. Hollaender, geklaut von Helmut xD)

Werbeanzeige