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

neido

Treue Seele

Beiträge: 225

Wohnort: Wien

  • Private Nachricht senden

21

17.02.2008, 14:26

@grek40: sowas ähnliches wollte ich eh machen, aber das ging sich in der Zeile nicht mehr aus. Und Ein Zeilenumbruch bei der Deklaration ist auch nicht das wahre :)

22

17.02.2008, 19:41

Welches Buch ist das? "C++ für Spieleprogrammierer"? Was schreibt Heiko da zu struct und class? Scheint dir nen falsches Bild übermittelt worden zu sein ...

Warum nimmst du class und nicht strut, wenn alle deine Variablen und Funktionen public sind?

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
struct dice
{
    unsigned int m_id;
    unsigned char m_value;

    void show(); // wobei operator << hier besser ist ... VIEL besser!

    // friend std::ostream& operator<<(std::ostream& out, dice const& data)

    // { /* --- */ return out; }

};


C-/C++-Quelltext

1
2
3
4
struct dice_container
{
    dice data[5];
};
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

Nelrim

Frischling

  • »Nelrim« ist der Autor dieses Themas

Beiträge: 33

Beruf: Entwicklungskonstrukteur

  • Private Nachricht senden

23

17.02.2008, 20:04

Zitat von »"Deviloper"«

Welches Buch ist das? "C++ für Spieleprogrammierer"? Was schreibt Heiko da zu struct und class? Scheint dir nen falsches Bild übermittelt worden zu sein ...

Warum nimmst du class und nicht strut, wenn alle deine Variablen und Funktionen public sind?

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
struct dice
{
    unsigned int m_id;
    unsigned char m_value;

    void show(); // wobei operator << hier besser ist ... VIEL besser!

    // friend std::ostream& operator<<(std::ostream& out, dice const& data)

    // { /* --- */ return out; }

};


C-/C++-Quelltext

1
2
3
4
struct dice_container
{
    dice data[5];
};


hmm...

in der Tat es ist das Buch C++ für Spieleprogrammierer.
Ich hatte es bis zu deiner Antwort gerade so verstanden (Kapitel 5) das Strukturen nur Variablen gruppieren. Klassen hingegen (Kapitel 7) auch Funktionen gruppieren können.
Eventuell habe ich was überlesen oder nicht verstanden.

im Moment kämpfe ich damit eine Struktur, bzw. einen Pointer auf eine Struktur an eine hunznormale Funktion zu übergeben:

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

// Prototypen


void TestFunktion(struct *pStruktur1);

// Hauptprogramm


int main()
{
    // Variablen

    int Ende = 0;
    struct Strukturschablone
    {
        int Variable1;
        int Variable2;
        int Variable3;
    };
    Strukturschablone Struktur1;
    Struktur1.Variable1 = 0;
    Struktur1.Variable2 = 0;
    Struktur1.Variable3 = 0;
    struct Strukturschablone *pStruktur1 = NULL;
    pStruktur1 = & Struktur1;
    TestFunktion(&Struktur1);
    cin >> Ende;
    return 0;
}
void TestFunktion(struct *pStruktur1)
{
    cout << "Hurra! Der Funktionsaufruf hat geklappt!" << endl;
}


der Compiler weigert sich aber beharrlich das zu akzeptieren und spuckt immer:

Zitat

C2664: 'TestFunktion': Konvertierung des Parameters 1 von 'main::Strukturschablone *' in '*' nicht möglich


Ausserdem will er nen tagnamen im Funktionsparameter, was ich mir aber aus nem anderen Tutorial so abgeschaut hatte *seufz

Nelrim
Auch der längste Weg beginnt mit einem ersten Schritt.

drakon

Supermoderator

Beiträge: 6 513

Wohnort: Schweiz

Beruf: Entrepreneur

  • Private Nachricht senden

24

17.02.2008, 20:14

Zitat

struct Strukturschablone *pStruktur1 = NULL;


Schau dir das mal nochmal an...

25

17.02.2008, 20:43

Hmm ja du hast ein vollkommen falsches Verständnis:

Zitat

Ich hatte es bis zu deiner Antwort gerade so verstanden (Kapitel 5) das Strukturen nur Variablen gruppieren. Klassen hingegen (Kapitel 7) auch Funktionen gruppieren können.

Guck dir mal das OOP-Konzept an. Klassen sind "Vorlagen". Bsw. ist das, was du dir unter Mensch vorstellst eine Vorlage, mit Attributen(die aber noch nicht genau bestimmt sind (variablen)) und Funktionen (bsw. gehen usw.), nun ist dann eine bestimmte Person, z.B. du, eine Instanz(Objekt) einer Klasse(Mensch).

Was du meinst ist eher ein Array ...

vllt kommt d.h. auch dein Verständnisproblem. struct* ist sinnlos. Du zeigst auf z.B. auf einen Menschen.

C-/C++-Quelltext

1
Mensch* Zeiger;


Achja und struct. Unter C war der Objekt Orientierte Ansatz noch nicht wirklich vertreten (auch wenn man oo in c programmieren kann ... schwer, aber es geht), und struct hatte eine andere Bedeutung. Unter C++ ist eine struct das selbe wie eine class, nur das Standardmäßig bei einer Struct jeder drauf zugreifen kann (public) und bei einer class nur die klasse selber (private).
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

grek40

Alter Hase

Beiträge: 1 491

Wohnort: Dresden

  • Private Nachricht senden

26

17.02.2008, 20:55

@drakon

dagegen gibts eigentlich nix einzuwenden...

@Nelrim

Also zu Klassen und Strukturen: in C++ ist der große Unterschied zwischen den beiden nur noch, dass der Standardzugriff auf eine Klasse private und auf eine Struktur public ist. Das sollte man zumindest im Hinterkopf behalten.
Trotzdem finde ich, dass nichts dagegen spricht, im praktischen Programmieralltag weitere Unterschiede zuzuordnen - ich verwende Strukturen nur als vorrangige Datencontainer (egal ob ich dann doch 1-2 Funktionen dazu nehme) und Klassen eben für die Verknüpfung von Funktionalität mit Variablen.

Dein Code zeigt recht deutlich, dass du die Verwendung von Strukturen / Klassen einfach noch nicht verstanden hast - schau dir den Abschnitt zu Klassen nochmal genau!! durch.

Es gibt Klassendeklarationen

C-/C++-Quelltext

1
class X;
Klassendefinitionen

C-/C++-Quelltext

1
class X {};
Variablendefinitionen in mehreren Formen (teilw. zusammen mit der Klassendefinition)

C-/C++-Quelltext

1
2
3
class X {} var1;
class X var2;
X var3;
und den Spezialfall, dass eine Klassenvariable erstellt wird, ohne die Klasse selbst zu benennen

C-/C++-Quelltext

1
class {} var;


Bezogen auf deinen Code sieht das also ca. so aus:

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
52
53
#include <iostream>
using namespace std;

// Prototypen


//

// hier wird (soweit ich die Fehlermeldung verstehe) eine leere Struktur ohne Name erstellt und ein Pointer darauf deklariert (pStruktur1)

//

void TestFunktion(struct *pStruktur1);

// Hauptprogramm


int main()
{
    // Variablen

    int Ende = 0;

//

// hier wird die Struktur 'Strukturschablone' definiert

//

    struct Strukturschablone
    {
        int Variable1;
        int Variable2;
        int Variable3;
    };

//

// hier wird eine Variable 'Struktur1' vom Typ Strukturschablone definiert und initialisiert

//

    Strukturschablone Struktur1;
    Struktur1.Variable1 = 0;
    Struktur1.Variable2 = 0;
    Struktur1.Variable3 = 0;

//

// hier wird ein Pointer auf Strukturschablone definiert und initialisiert

//

    struct Strukturschablone *pStruktur1 = NULL;
    pStruktur1 = & Struktur1;

//

// hier wird versucht, pStruktur1 aus Testfunktion, was ein Pointer auf eine leere namenlose Struktur zu sein scheint mit der Adresse auf eine Instanz der Struktur 'Strukturschablone' zu initialisieren

//

    TestFunktion(&Struktur1);
    cin >> Ende;
    return 0;
}

void TestFunktion(struct *pStruktur1)
{
    cout << "Hurra! Der Funktionsaufruf hat geklappt!" << endl;
}


Weiss nicht, ob dir das jetzt weiter hilft.


// €dit
Developer hat ja einige Sachen schon gepostet während ich noch beim schreiben war^^

Werbeanzeige