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

Errschaffer

Alter Hase

  • »Errschaffer« ist der Autor dieses Themas

Beiträge: 865

Wohnort: Frankfurt

  • Private Nachricht senden

1

20.07.2008, 17:14

Strukturen

Hallo,

ich verstehe das mit diesen Strukturen noch nicht so richtig.

Also nehmen wir mal an ich erzeuge mir eine Struktur +Instanz in der main Funktion.
Kann ich diese dann ohne sie mit Parametern zu übergeben auch in anderen Funktionen verwenden?

Oder werden Strukturen wie lokale und globale Variablen behandelt?

Nox

Supermoderator

Beiträge: 5 272

Beruf: Student

  • Private Nachricht senden

2

20.07.2008, 17:25

hast du dich schon mit Klassen beschäftigt?
Wenn ja: In C++ sind Strukturen fast das gleiche wie Klassen und werden genauso behandelt.
Wenn nein: Klassen/Strukturen werden im Prinzip genauso wie die anderen Variablen behandelt, wobei es einige Besonderheiten zu beachten gibt. Z.B. kann man bei Klassen/Strukturen Probleme beim Kopieren einer Instanz bekommen. Ein Stichworte ist da Kopierkonstruktor, aber falls dir das ncihts sagt, lass es erstmal außen vor.

EDIT:
Allerdings sind Klassen/Strukturen nicht von überall "sichtbar". Sprich es kann sein, dass der Kompilier meint eine Klasse/Struktur nciht zu kennen. Aber auch das ist eig ein anderes Problem.

Ggf sag uns was du genau nicht verstehst. Nur die Verwendung?
Die Struktur ist da wie sie sichtbar ist, auch verwendbar. Die Instanz wird wie eine Varibale behandelt und kann ein Parameter, lokal und global sein.
PRO Lernkurs "Wie benutze ich eine Doku richtig"!
CONTRA lasst mal die anderen machen!
networklibbenc - Netzwerklibs im Vergleich | syncsys - Netzwerk lib (MMO-ready) | Schleichfahrt Remake | Firegalaxy | Sammelsurium rund um FPGA&Co.

Errschaffer

Alter Hase

  • »Errschaffer« ist der Autor dieses Themas

Beiträge: 865

Wohnort: Frankfurt

  • Private Nachricht senden

3

20.07.2008, 17:38

Ne Klassen habe ich noch nicht durchgenommen (noch 1.Kapitel bis dorthin^^).


Also wenn ich das richtig Verstanden habe werden Variabeln einer Struktur genauso behandelt wie normale Variablen die nicht einer Struktur angehören?

Ich meine jetzt im sinne von lokal un global.

4

20.07.2008, 17:59

lokal und global sind ja sogenannte Scopes. Durch { eingeleitet, durch } geschlossen.

Strukturen sind auch nur ganz einfache Variablentypen. Du kannst sie benutzen wie nen einfachen Integer odg.
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

Nox

Supermoderator

Beiträge: 5 272

Beruf: Student

  • Private Nachricht senden

5

20.07.2008, 18:20

Hmm wäre die Frage klarer gestellt, könnte man sie eindeutig beantworten. Ich poste ein Beispiel und du kannst dann mal bei den Sachen, die dir nicht klar sind, fragen.

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
struct Struktur
{
int ganzzahl;
float kommazahl;
}

Struktur Funktion(Struktur s) //geht da er Struktur kennt

{
 s.ganzahl = 1; //geht

 ganzahl = 2; //geht nicht


 return s; //geht

}

main()
{
ganzahl = 3; //geht nicht

Struktur::ganzahl = 4; //geht nicht (ohne weiteres - Stichwort static)


Struktur instanz;
instanz.kommazahl = 0.01f; //geht

Struktur ret = Funktion(instanz); //geht, s.o.

instanz = ret; //geht (unter bestimmen umständen, die hier erfüllt sind)

}
PRO Lernkurs "Wie benutze ich eine Doku richtig"!
CONTRA lasst mal die anderen machen!
networklibbenc - Netzwerklibs im Vergleich | syncsys - Netzwerk lib (MMO-ready) | Schleichfahrt Remake | Firegalaxy | Sammelsurium rund um FPGA&Co.

6

20.07.2008, 20:52

Hmm aber da eine struct nicht ein POD ist, sollte man per Referenz übergeben.

Dann solltest du vllt. auch zeigen, dass auch sowas möglich ist:

C-/C++-Quelltext

1
2
3
4
5
6
7
struct foo
{
    int var; // Membervariable

    foo(const int var) // Konstruktor

        : var(var) // Initialisierungsliste

    {}
}; 
... entspricht:

C-/C++-Quelltext

1
2
3
4
5
6
7
8
class foo
{
public:
    int var; // Membervariable

    foo(const int var) // Konstruktor

        : var(var) // Initialisierungsliste

    {}
}; 
...
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

David_pb

Community-Fossil

Beiträge: 3 886

Beruf: 3D Graphics Programmer

  • Private Nachricht senden

7

20.07.2008, 21:41

Zitat von »"Deviloper"«

Hmm aber da eine struct nicht ein POD ist, sollte man per Referenz übergeben.


Wieso? Is doch auch ein POD Typ?

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
struct vec3_t
{
  float x;
  float y;
  float z;

  void Set( float x_, float y_, float z_ ) { x = x_; y = y_; z = z_; }
  void Add( const vec3_t& v ) 
  {
    x += v.x; y += v.y; z += v.z; 
  }

  // uswusf...

};
@D13_Dreinig

8

20.07.2008, 22:10

Hm laut http://www.parashift.com/c++-faq-lite/intrinsic-types.html#faq-26.7 haste sogar recht :/ Verdammt ^^ Sorry. Nee sobald der Kopiervorgang aufwendiger ist, als per Referenz zu übergeben, dann halt so ;)
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

Faule Socke

Community-Fossil

Beiträge: 1 915

Wohnort: Schreibtischstuhl

  • Private Nachricht senden

9

21.07.2008, 00:19

OK ich werd mal probieren, Strukturen zu erklären. Angenommen du willst ein Rennspiel programmieren. So ein Rennauto hat nun zum Beispiel ein bestimmtes Gewicht(was du evt. für Physik brauchst), eine Höchstgeschwindigkeit und Leistung(in PS). So nun könntest du ja für dein Auto einfach 3 Variablen erstellen(in der main oder in einer anderen Funktion):

C-/C++-Quelltext

1
2
3
4
5
// ...

int weight; // gewicht

int speed; // geschwindigkeit

int power; // leistung

// ...


Was nun aber, wenn du mehrere Autos haben willst in deinem Spiel? Man könnte z.b. die variablen weight_auto1, weight_auto2 etc... nennen. Aber wäre es nicht besser, wenn man z.b. einen eigenen Variablentyp(also sowas wie int) erstellen könnte, der dann automatisch alle daten des autos beinhaltet? Genau hier liegt der ansatzpunkt von strukturen. Du kannst einfach alle diese Variablen in eine Struktur verschieben. Durch die Deklaration einer Struktur erstellst du sozusagen deinen eigenen Variablentyp.

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
struct car
{
    int weight; // gewicht

    int speed; // geschwindigkeit

    int power; // leistung

};

// Und in der main oder sonstwo...

car my_car;
my_car.weight = 1500;
my_car.speed = 330;
my_car.power = 570;


Am anfang wird deine Struktur mit dem Sinnreifen namen car(= auto) erstellt. In der zeile "car my_car;" wird nun eine Instanz dieser Struktur erzeugt. D. h., es wird sozusagen dein Auto erstellt. Ich habe die variable mal my_car genannt. Mit dem "."-Operator kannst du nun auf die einzelnen Elemente deines Autos zugreifen und so z.b. Gewicht oder Leistung festlegen. Nun kannst du auch auf einfache Weise mehrere autos erstellen und musst nur noch eine Variable pro auto Deklarieren.

C-/C++-Quelltext

1
2
3
4
// Mehrere autos...

car car1;
car car2;
car car3;


Wenn man das ganze in einem Array hat, ist es nicht nur übersichtlicher, sondern auch später einfacher zu bearbeiten(Stichwort dyn. Speicherreservierung):

C-/C++-Quelltext

1
car my_cars[10]; // 10 Autos erstellen


Eine Struktur ist also nur eine Ansammlung von Variablen um bequem darauf zuzugreifen.

Übrigens: Eine Struktur kann auch andere Strukturen oder deren Instanzen beinhalten.

Falls du noch fragen hast, einfach stellen, ich hoffe ich konnte dir helfen,

Socke

10

21.07.2008, 00:47

So sah das Konzept einer Struktur irgendwann bestimmt mal aus ...
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

Werbeanzeige