Willkommen ~Gast!
Registrieren || Einloggen || Hilfe/FAQ || Staff
Probleme mit der Registrierung im Forum? Melde dich unter registerEin Bild.
Autor Beitrag
000
11.08.2007, 18:11
the_Crow



Ich habe ein Klassensystem in HL2MP eingebaut. Alles funktioniert. Leider bekommt man aber keine Waffe beim respawn. Deswegen hab ich die Datei multiplay_gamerules.cpp modifiziert. Wenn ich das ganze compile dann bekomm ich folgenden Fehler. Ich kann aber keine Stellen finden an der ein ; fehlen würde.

Quellcode:error C2143: syntax error : missing ';' before '->' Code:
Quellcode:void CMultiplayRules::PlayerSpawn( CBasePlayer *pPlayer )
    {
        bool        addDefault;
        CBaseEntity    *pWeaponEntity = NULL;

        pPlayer->EquipSuit();
        
        addDefault = true;

        while ( (pWeaponEntity = gEntList.FindEntityByClassname( pWeaponEntity, "game_player_equip" )) != NULL)
        {
            pWeaponEntity->Touch( pPlayer );
            addDefault = false;
        }

        CHL2MP_Player->Loadout();
    }
Stelle an der der Fehler auftritt:

Quellcode:CHL2MP_Player->Loadout(); Ohne diesen Teil bekomm ich den Fehler nicht. Mit schon.

--

www.the-crow.at - meine persönliche Website | TibiaGerman | Twitter | Wiaschtlsiada


Dieser Beitrag wurde am 11.08.2007 um 18:12 von the_Crow bearbeitet.
zum Seitenanfang zum Seitenende Profil || Suche
001
11.08.2007, 18:18
Bluthund



CHL2MP_Player wird wohl eher ne Klasse sein und kein Pointer auf ein Objekt dieser... folglich gibts da auch nix zu dereferenzieren.

--

The C language combines all the power of assembly language with all the ease-of-use of assembly language.
"humorig is n blödwort :>" by -CarniGGeLjumpR-

zum Seitenanfang zum Seitenende Profil || Suche
002
11.08.2007, 18:27
the_Crow



Ja es ist eine Klasse.

Weitere Versuche:
Quellcode:pPlayer->Loadout();
error C2039: 'Loadout' : is not a member of 'CBasePlayer'
Quellcode:CHL2MP_Player::Loadout();
error C2352: 'CHL2MP_Player::Loadout' : illegal call of non-static member function

--

www.the-crow.at - meine persönliche Website | TibiaGerman | Twitter | Wiaschtlsiada

zum Seitenanfang zum Seitenende Profil || Suche
003
11.08.2007, 18:59
Bluthund



Aua das tut ja weh... Nimm dir mal lieber ein gutes Buch.

--

The C language combines all the power of assembly language with all the ease-of-use of assembly language.
"humorig is n blödwort :>" by -CarniGGeLjumpR-

zum Seitenanfang zum Seitenende Profil || Suche
004
11.08.2007, 20:25
the_Crow



Es wäre einfacher, wenn du mir sagen könntest was daran nicht passt.

Edit: Das Problem ist, dass ich nicht weiß wie der Pointer für CHL2MP_Player aussieht.

--

www.the-crow.at - meine persönliche Website | TibiaGerman | Twitter | Wiaschtlsiada


Dieser Beitrag wurde am 11.08.2007 um 20:37 von the_Crow bearbeitet.
zum Seitenanfang zum Seitenende Profil || Suche
005
11.08.2007, 20:44
Bluthund



Erstens weiß ich nicht was LoadOut() für eine Methode ist und zweitens scheinst du es auch nicht zu wissen denn sonst würdest du nicht versuchen eine nichtstatische Memberfunktion über den Scope-Operator aufzurufen.

Ein Pointer für CHL2MP_Player sieht so aus:
CHL2MP_Player *pLustigerName; // optional und sicherer wäre hier noch = NULL

Der zeigt dann willkürlich auf irgendwelchen Speicher. Du solltest ihn also tunlichst vor der Verwendung auf nen gültiges Objekt der Klasse CHL2MP_Player initialisieren.

Anbei: Nichts gegen rumprobieren... Das hab ich anfänglich auch gemacht (damals am HLSDK) aber man sollte trotzdem die Grundlagen der Programmiersprache C++ beherrschen und wissen mit was für Klassen man arbeitet bzw wo man deren Definition nachschauen kann (Strg+F ftw)

--

The C language combines all the power of assembly language with all the ease-of-use of assembly language.
"humorig is n blödwort :>" by -CarniGGeLjumpR-

zum Seitenanfang zum Seitenende Profil || Suche
006
11.08.2007, 20:49
hausi



Ich sags mal einfach so: pPlayer ist in deinem Fall wahrscheinlich vom Typ CHL2MP_Player. Wenn dir jetzt allerdings einfach jemand sagt, wie du das schreiben musst, bringt das imo überhaupt nichts. Und damit du dabei noch etwas lernst: Such mal nach dynamic_cast und lies dir ein Tutorial zu den verschiedenen C++-Casts durch.

--

zum Seitenanfang zum Seitenende Profil || Suche
007
11.08.2007, 20:54
the_Crow



Was Loadout(); macht weiß ich.

Wie der Pointer aussieht weiß ich, aber nicht wo ich ihn finde.

Es ist nicht pPlayer.

--

www.the-crow.at - meine persönliche Website | TibiaGerman | Twitter | Wiaschtlsiada

zum Seitenanfang zum Seitenende Profil || Suche
008
11.08.2007, 21:20
Bluthund



Zitat:
the_Crow postete
Was Loadout(); macht weiß ich.

Wie der Pointer aussieht weiß ich, aber nicht wo ich ihn finde.

Diese Aussagen schließen sich gegenseitig aus. Wenn du weißt was Loadout macht, solltest du auch wissen wo das Objekt herkommen soll für das die Methode aufgerufen wird.

Zitat:
Es ist nicht pPlayer.
Gut kombiniert Sherlock ;) pPlayer ist ja ein Pointer auf CBasePlayer und nicht auf CHL2MP_Player.

Ich hab jetz grad mal in meiner unendlichen Güte ;P nen HL2SDK installiert und nachgekuckt. Aber da gibt es weder eine Klasse CHL2MP_Player noch eine Funktion Loadout(). Das einzige was vorhanden war war eine Klasse CHL2_Player (abgeleitet von CBasePlayer *auf hausi's post zeig*) allerdings ohne besagte Memberfunktion. Wenn du deine besagte Klasse selbst geschrieben haben solltest, dann solltest du ja wissen ob du diese von CBasePlayer abgeleitet hast und kannst dir dann entsprechend nen Pointer zurechtcasten.

--

The C language combines all the power of assembly language with all the ease-of-use of assembly language.
"humorig is n blödwort :>" by -CarniGGeLjumpR-

zum Seitenanfang zum Seitenende Profil || Suche
009
11.08.2007, 21:24
the_Crow



Loadout is selbst geschrieben.

--

www.the-crow.at - meine persönliche Website | TibiaGerman | Twitter | Wiaschtlsiada

zum Seitenanfang zum Seitenende Profil || Suche
010
11.08.2007, 22:20
the_Crow



Alles was ich versuche funktioniert nicht. Hab mir auch ein paar Tutorials durchgelesen. Hilft leider auch nix. Ich weiß einfach nicht was ich falsch mach.

--

www.the-crow.at - meine persönliche Website | TibiaGerman | Twitter | Wiaschtlsiada

zum Seitenanfang zum Seitenende Profil || Suche
011
12.08.2007, 11:27
hausi



Was du falsch machst: Du kannst kein C++ und versuchst trotzdem ein nicht triviales C++-Projekt zu schreiben. Das kann nicht wirklich funktionieren.
Wie es richtig wäre: Zuerst C++ lernen (mit einigen Test-Projekten), dann an das HL2-SDK gehen.
Wie du nur dein Problem hier löst: Ich habe zwar kein HL2-SDK hier, aber bin mir ziemlich sicher, dass dein pPlayer *CHL2MP_Player ist. Also lies dir meinen Post durch und such dir ein Tutorial dazu. So schwer ist das nicht (benötigt ein bisschen Wissen zu templates, OO und in deinem Fall zu Pointern) und wenn du an sowas scheiterst, gibt es auch genügend andere Probleme, die dich zum scheitern bringen.
Edit:
Und poste doch mal, was genau du versucht hast (was du dachtest, dass es funktionieren müsste). Ev. ist es ja zu 95% richtig und es fehlt nur noch etwas kleines.

--


Dieser Beitrag wurde am 12.08.2007 um 11:30 von hausi bearbeitet.
zum Seitenanfang zum Seitenende Profil || Suche
012
12.08.2007, 12:27
the_Crow



Ich weiß jetzt wie es geht.

Das Problem bei der ganzen Sache ist, dass ich mit ein paar Leuten an einer Mod arbeite, wir aber noch keinen Coder haben. Deswegen hab ich mir ein paar Tutorials für die Features, die einbaun wolln, gesucht und versucht diese umzusetzten. Leider passt nicht jedes Tutorial genau so rein, wie ich es gefunden habe. Aus diesem Grund musste ich Sachen änder und es traten Fehler auf. Ich bin eben kein richtiger C++ Coder. Ich kenn mich ganz wenig aus und weiß ungefär was welchen Effekt hat, aber im Grunde bin ich Webcoder, Mapper und Modeller.

Wie du siehst will ich das ja gar nicht machen. Aber ich bin der einzige der es ansatzweise versteht.

--

www.the-crow.at - meine persönliche Website | TibiaGerman | Twitter | Wiaschtlsiada

zum Seitenanfang zum Seitenende Profil || Suche