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

CW_Kovok

Alter Hase

Beiträge: 836

Wohnort: nähe Bonn

Beruf: Schüler

  • Private Nachricht senden

11

10.01.2006, 19:33

dann stelle ich jetzt mal einfach die frage, was ist der genaue unterschied, weil ich dass nicht weis... Alles was ich weiß ist, das sie beide mehrfachauflösungen verhindern, aber wo liegt jetzt der so elementare wichtige unterschied?
Was es alles gibt, das ich nich brauche - Aristoteles

12

10.01.2006, 20:17

1) würd michd as mit #pragma und #ifndef auch mal interessieren

2)@devil ich glaub kaum, dass die beutel funktion die von mir beschriebenen fehelr verursacht.

Zitat

--------------------Konfiguration: Circle of the Druids - Win32 Debug--------------------
Kompilierung läuft...
Circle of the Druids.cpp
c:\circle of the druids\c_testprogramm_ohne_grafik\druiden.hpp(13) : error C2011: 's_Bonus' : 'struct'-Typ-Neudefinition
c:\circle of the druids\c_testprogramm_ohne_grafik\druiden.hpp(24) : error C2011: 'CDruide' : 'class'-Typ-Neudefinition
c:\circle of the druids\c_testprogramm_ohne_grafik\druiden.hpp(50) : error C2011: 'CNaturdruide' : 'class'-Typ-Neudefinition
c:\circle of the druids\c_testprogramm_ohne_grafik\druiden.hpp(60) : error C2011: 'CWasserdruide' : 'class'-Typ-Neudefinition
c:\circle of the druids\c_testprogramm_ohne_grafik\druiden.hpp(70) : error C2011: 'CFeuerdruide' : 'class'-Typ-Neudefinition
c:\circle of the druids\c_testprogramm_ohne_grafik\druiden.hpp(80) : error C2011: 'CLichtdruide' : 'class'-Typ-Neudefinition
c:\circle of the druids\c_testprogramm_ohne_grafik\druiden.hpp(90) : error C2011: 'CDunkelheitdruide' : 'class'-Typ-Neudefinition
c:\circle of the druids\c_testprogramm_ohne_grafik\druiden.hpp(101) : error C2011: 'CItem' : 'class'-Typ-Neudefinition
Druiden.cpp
c:\circle of the druids\c_testprogramm_ohne_grafik\druiden.hpp(13) : error C2011: 's_Bonus' : 'struct'-Typ-Neudefinition
c:\circle of the druids\c_testprogramm_ohne_grafik\druiden.hpp(24) : error C2011: 'CDruide' : 'class'-Typ-Neudefinition
c:\circle of the druids\c_testprogramm_ohne_grafik\druiden.hpp(50) : error C2011: 'CNaturdruide' : 'class'-Typ-Neudefinition
c:\circle of the druids\c_testprogramm_ohne_grafik\druiden.hpp(60) : error C2011: 'CWasserdruide' : 'class'-Typ-Neudefinition
c:\circle of the druids\c_testprogramm_ohne_grafik\druiden.hpp(70) : error C2011: 'CFeuerdruide' : 'class'-Typ-Neudefinition
c:\circle of the druids\c_testprogramm_ohne_grafik\druiden.hpp(80) : error C2011: 'CLichtdruide' : 'class'-Typ-Neudefinition
c:\circle of the druids\c_testprogramm_ohne_grafik\druiden.hpp(90) : error C2011: 'CDunkelheitdruide' : 'class'-Typ-Neudefinition
c:\circle of the druids\c_testprogramm_ohne_grafik\druiden.hpp(101) : error C2011: 'CItem' : 'class'-Typ-Neudefinition
Spiel.cpp
c:\circle of the druids\c_testprogramm_ohne_grafik\druiden.hpp(13) : error C2011: 's_Bonus' : 'struct'-Typ-Neudefinition
c:\circle of the druids\c_testprogramm_ohne_grafik\druiden.hpp(24) : error C2011: 'CDruide' : 'class'-Typ-Neudefinition
c:\circle of the druids\c_testprogramm_ohne_grafik\druiden.hpp(50) : error C2011: 'CNaturdruide' : 'class'-Typ-Neudefinition
c:\circle of the druids\c_testprogramm_ohne_grafik\druiden.hpp(60) : error C2011: 'CWasserdruide' : 'class'-Typ-Neudefinition
c:\circle of the druids\c_testprogramm_ohne_grafik\druiden.hpp(70) : error C2011: 'CFeuerdruide' : 'class'-Typ-Neudefinition
c:\circle of the druids\c_testprogramm_ohne_grafik\druiden.hpp(80) : error C2011: 'CLichtdruide' : 'class'-Typ-Neudefinition
c:\circle of the druids\c_testprogramm_ohne_grafik\druiden.hpp(90) : error C2011: 'CDunkelheitdruide' : 'class'-Typ-Neudefinition
c:\circle of the druids\c_testprogramm_ohne_grafik\druiden.hpp(101) : error C2011: 'CItem' : 'class'-Typ-Neudefinition
Gegnerklassen.cpp
C:\Circle of the Druids\C_Testprogramm_Ohne_Grafik\Gegnerklassen.cpp(59) : warning C4183: 'MoskitoStachel': Definition der Member-Funktion sieht aus wie ctor, aber der Name entspricht nicht der umschliessenden Klasse
Fehler beim Ausführen von cl.exe.

Circle of the Druids.exe - 24 Fehler, 1 Warnung(en)

13

10.01.2006, 21:09

hmm tja. wenn du in spiel.hpp die druide.hpp includierst und in der main.cpp dann druide.hpp und spiel.hpp....
Devil Entertainment :: Your education is our inspiration
Der Spieleprogrammierer :: Community Magazin
Merlin - A Legend awakes :: You are a dedicated C++ (DirectX) programmer and you have ability to work in a team? Contact us!
Siedler II.5 RttR :: The old settlers-style is comming back!

Also known as (D)Evil

14

11.01.2006, 10:13

´super danke daran hats gelegen :)

wieder was dazu gelernt^^

hätte aber noch ne frage und zwar bezüglich vererbung, weil das scheint bei mir nicht zu klappen

C-/C++-Quelltext

1
2
CGegner *Gegner = NULL; 
    Gegner = new CMoskito;


jetzt sollte doch nochmal der pointer Gegner ein Moskito sein, aber das stimmt nicht, weil ich nur auf die CGegner funktionen zugreifen kann.

laut buch hab ich aber alles richtig gemacht nämlich so:

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
//Klassen

//Gegnertypen


class CGegner
{
    //Membervariablen

public:
    int m_Leben, m_Schaden, m_Ruestung, m_Mana, m_Zorn, m_DurchschnittSchaden;
    float m_fGeschwindigkeit;
    string m_stName, m_stElement;
    //Memberfunktionen

    void ZeigeDaten();
    virtual void Angreifen();
};

class CMoskito : public CGegner
{
    //Memberfunktionen

public:
    CMoskito();
    void Angreifen();
    void MoskitoStachel();
};


weiß wer worans liegen kann? oder muss ich da eine extrabefehl einfügen, dass der erkennt, dass es ein moskito ist und nicht die gegnerschablone...

wenn ich CMoskito *Gegner = NULL;
Gegner = new CMoskito;
verwende funktioniert, aber ich will, dass es auch mit der im buch vorgegebenen schreibweise funktioniert.

danke

mfg
Simon

15

11.01.2006, 17:28

k ich habe include guards verwendet und jetzt funktionierts plötzlich ;)

also jetzt klappt eigentlich schon alles recht gut , nur gibts leider wieder einen fehler den ich ned versteh, warum der überhaupt auftritt.

hier die angaben.

C-/C++-Quelltext

1
2
3
4
5
CGegner *Gegner = NULL;
Gegner = new CMoskito;
//.....

Druide->Angriff(Gegner);
//......


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
//Klassen


class CDruide
{
public:
    //Membervariablen

    int m_MentaleKraft, m_Intelligenz, m_Wissen, m_Staerke, m_Koerper, m_Gewandheit;
    int m_FortunalesWissen, m_MantoraKraft;
    float m_fGeschwindigkeit, m_fRuestung, m_fZauberrate, m_fLebensregeneration, m_fManaregeneration;
    int m_Mana, m_Leben, m_Schaden;
    int m_Stufe;
    float m_fWiderstandNatur, m_fWiderstandWasser, m_fWiderstandFeuer, m_fWiderstandLicht, m_fWiderstandDunkelheit;
    float m_fBonusNatur, m_fBonusWasser, m_fBonusFeuer, m_fBonusNLicht, m_fBonusDunkelheit;
    string m_stName;
    int m_Gold, m_Knochen, m_Erfahrung, m_Herzen;

    //Memberfunktionen

    CDruide()
    {
    }
    CDruide(int Druidentyp);
    void ZeigeDaten();
    void ErhoeheAttribute(int Druidentyp);
    void ModifiziereAttribute(int Druidentyp);
    void LevelUp();
    void Angriff(CGegner *Gegner);  
    void BenutzeBeutel();
    void ZeigeLebenMana();
};


C-/C++-Quelltext

1
2
3
4
5
6
//Angreifen

void CDruide::Angriff(CGegner *Gegner)
{
    cout << "" << m_stName << " greift an und richtet " << m_Schaden <<" Schaden an." << endl;
    Gegner->m_Leben -= m_Schaden - (Gegner->m_Ruestung/2);
}


mir kommt vor das muss schon fast gehen, weil die übergabe mit CDruide *Druide auch auf dieselbe weise funktioniert hat.

nur diesmal kommen diese fehler

Zitat

--------------------Konfiguration: Circle of the Druids - Win32 Debug--------------------
Kompilierung läuft...
Spiel.cpp
c:\circle of the druids\c_testprogramm_ohne_grafik\druiden.hpp(49) : error C2061: Syntaxfehler : Bezeichner 'CGegner'
C:\Circle of the Druids\C_Testprogramm_Ohne_Grafik\Spiel.cpp(190) : error C2660: 'Angriff' : Funktion akzeptiert keine 1 Parameter
Fehler beim Ausführen von cl.exe.

Spiel.obj - 2 Fehler, 0 Warnung(en)


woran liegt das denn bitte?
die funktion hat gefälligst 1 parameter zu akzeptieren :D

bitte um hilfe

mfg
Simon

16

11.01.2006, 18:55

pfff... guck dir mal linie 49 an ;)
Devil Entertainment :: Your education is our inspiration
Der Spieleprogrammierer :: Community Magazin
Merlin - A Legend awakes :: You are a dedicated C++ (DirectX) programmer and you have ability to work in a team? Contact us!
Siedler II.5 RttR :: The old settlers-style is comming back!

Also known as (D)Evil

17

11.01.2006, 20:18

C-/C++-Quelltext

1
MainQuestBaer(Druide);


du meinst diese zeile?

sry aber ich checks ned :(

18

12.01.2006, 10:01

hm das mit der vererbung hat doch ned geklappt, habs heute nochmal getestet :)

habs nochmal mitn buch verglichen und ich mach afaik zu 100% keinen fehler, also eifnach ein bug der sich nicht beheben lässt :)

und das ich den pointer Gegner auf die Druiden.hpp und Druiden.cpp nicht übergeben kann, ist ein weiterer fehler, den ich jetzt nach kA 2h arbeit nicht beheben konnte :)

naja vl weiß irgendwer von euch worans liegt und gibt mir noch nen tipp oder gar die lösung^^

ich bin erstmal weg arbeiten :)

ciao

Phil_GDM

Alter Hase

Beiträge: 443

Wohnort: Graz

Beruf: Student-Softwareentwicklung u. Wissensmanagement

  • Private Nachricht senden

19

20.01.2006, 09:08

Zitat von »"nix da"«

Zitat von »"Devil"«

hmm kannst du machen -.- und nerv mich nicht... verdammt, selbst MS hat die beschißenen #ifndef DATEINAME_H #define DATEINAME_H mitlerweile aus ihrem code raus -.- also aus dem der automatisch erstellt wird... früher hatten die das auch mal.. mtlw. haben die auch nur noch #pragma once... und ich hab damit nie Probleme gehabt -.- und meine Kunden waren bis jetzt stehts mit meinen Softwares zu frieden -.-
Man merkt Du hast keinen Peil was es mit #pragma once vs. Include Guards auf sich hat. Merkt man richtig.


nix_da
Gibts jetzt eigentlich einen Unterschied zwischen den Include-Guards

C-/C++-Quelltext

1
2
3
4
#ifndef _FILE_H_ 
#define _FILE_H_

#endif

und dem

C-/C++-Quelltext

1
#pragma once

Wenn ja, welchen, würde mich wirklich interessieren, denn seit diesem Thread bin ich mir nicht mehr sicher, ob ich jetzt die Include-Guards oder #pragma once verwenden soll :wirbel:.

mfg Philipp

grek40

Alter Hase

Beiträge: 1 491

Wohnort: Dresden

  • Private Nachricht senden

20

20.01.2006, 15:47

Ich hab zwar kein Vorwissen in dieser Sache aber soweit ich mir das zusammenreime ist

C-/C++-Quelltext

1
2
3
4
#ifndef FILE_H
#define FILE_H

#endif

sicherer, da es egal ist, ob die selbe Datei aus irgendeinem Grund von verschiedenen Quellen aus eingebunden wird.
Zu

C-/C++-Quelltext

1
#pragma once

meine ich gelesen zu haben, dass es prüft, ob eine Datei schon eingebunden wurde und diese dann nicht nochmal einbindet. Also könnte die Datei 2* eingebunden werden, wenn aus irgendeinem Grund verschiedene Quellverzeichnisse durchsucht werden.
Sicher gibt es auch noch eine Menge anderer Vor-/Nachteile zwischen den beiden Varianten.

[Vorsicht Halbwissen]

Werbeanzeige