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

Teiby

Frischling

  • »Teiby« ist der Autor dieses Themas

Beiträge: 42

Beruf: Ausbildung

  • Private Nachricht senden

1

11.09.2011, 07:41

Geht das? Struktur in Struktur?

Ich möcht hier sowas machen:

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
struct S_Test
{
    int Bla;
    int xyz;

    struct Zweite
    {
        int Blubb;
        int irgendwas;
    };
}

void main()
{
    S_Test Struktur;

    Struktur.Bla = 1;
    Struktur.Zweite.Blubb = 1;
}


leider weigert sich Visualstudio das zu erstellen da er "Struktur.Zweite.Blubb" nicht mag. Weiss wer weiter?

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »Teiby« (11.09.2011, 07:46)


Tobiking

1x Rätselkönig

  • Private Nachricht senden

2

11.09.2011, 08:26

Das geht, nur ist Zweite der Typ, und keine Variable. Die fehlt in deinem Code.

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
struct S_Test
{
    int Bla;
    int xyz;

    struct Zweite
    {
        int Blubb;
        int irgendwas;
    } zwei; // Hier wird die Variable zwei vom Typ Zweite Deklariert
}

void main()
{
    S_Test Struktur;

    Struktur.Bla = 1;
    Struktur.zwei.Blubb = 1;
}

Teiby

Frischling

  • »Teiby« ist der Autor dieses Themas

Beiträge: 42

Beruf: Ausbildung

  • Private Nachricht senden

3

11.09.2011, 08:56

Funktioniert.

Jedoch etwas komisch. Wenn ich

C-/C++-Quelltext

1
Struktur.zwei.Blubb = 1;

eingebe, dann meckert das Erstellungsprogramm nicht rum beim erstellen, jedoch sagt er:

Zitat

IntelliSense: "Der Ausdruck links von . oder -> wurde nicht verstanden"
Und es wird auch nichts aufgelistet.
Wenn ich aber nun statt des Punks 2 doppelpunkte mache (::) dann wirds angezeigt und die Anwendung lässt sich auch erstellen. Was aber nun der Unterschied?

4

11.09.2011, 08:59

Punkt: Einzelnes Element
Doppelpunkte: Alles
So ein Strukturbau hilft mir eig. nur als Array, ansonsten habe ich Alternativen.

MfG
Check

Teiby

Frischling

  • »Teiby« ist der Autor dieses Themas

Beiträge: 42

Beruf: Ausbildung

  • Private Nachricht senden

5

11.09.2011, 09:24

Einzelnes Element? Alles? Versteh ich nicht.
Könntest du das etwas genauer erklären? Am besten in zusammenhang mit meinem Beispiel

NachoMan

Community-Fossil

Beiträge: 3 885

Wohnort: Berlin

Beruf: (Nachhilfe)Lehrer (Mathematik, C++, Java, C#)

  • Private Nachricht senden

6

11.09.2011, 09:36

Die Version von Tobiking läuft bei mir. Es fehlt nur ein Semikolon am ende der Struktur.

Ich glaub Checkmateing meint, dass du über -> und . auf die Daten und Methoden von Instanzen der Strukturen zugreifen kannst. Mit dem Doppelpunkt hingegen kannst du auf alles zugreifen was Global, ohne Instanz, verfügbar ist zugreifen. Z.b. Statische Variablen, Methoden usw.
Das ist aber noch etwas zu weit für dich und du kannst es erstmal vergessen.

Für dich ist wichtig, dass du mit dem Doppelpunkt auf Inhalte von Namensbereiche(z.b. std:: ) zugreifen kannst und mit . und -> auf die Inhalte von Instanzen der Struktur. Eine Struktur ist also nicht das selbe wie ein Namensbereich.
"Der erste Trunk aus dem Becher der Erkenntnis macht einem zum Atheist, doch auf dem Grund des Bechers wartet Gott." - Werner Heisenberg
Biete Privatunterricht in Berlin und Online.
Kommt jemand mit Nach oMan?

7

11.09.2011, 11:59

Ja, Ein Namensbereich (namespace) kann zum Beispiel auch selbst Strukturen erhalten.
Angenommen wir haben den Namensbereich N, bezogen auf dein Beispiel würde es bei der Deklaration folgenden Syntax geben:

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
namespace N{
    struct S_Test{
    int Bla;
    int xyz;
    
    struct Zweite{
        int Blubb;
        int irgendwas;
        } zwei;
    };
}


Zur Verwendung wäre das dann folgender:

C-/C++-Quelltext

1
2
3
4
5
6
7
N::S_Test myTestStruct;
myTestStruct.Zweite.Blubb=1;

//Oder so:
using namespace N;
S_Test myTestStruct;
myTestStruct.Zweite.Blubb=1;


Im Übrigen funktioniert das auch:

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
struct Zweite{
    int Blubb;
    int irgendwas;
};
struct S_Test{
    int Bla;
    int xyz;
    Zweite zwei;
};



Zu den angesprochenen Arrays:
Die sind sinnvoll wenn man mehrere Elemente hat, mit den Eigenschaften die in der S_Test Struktur stehen und zusätzliche, einzelne Elemente, die Struktur Zweite, die z.B. einen Punkt angeben können.
Wie NachoMan aber bereits sagte, vergiss das erst einmal, dies war nur zu Demonstrationszwecken.

MfG
Check

BlueCobold

Community-Fossil

Beiträge: 10 738

Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer

  • Private Nachricht senden

8

11.09.2011, 13:03

Ich denke ein Grundlagenbuch wäre nicht schlecht, Teiby...
Teamleiter von Rickety Racquet (ehemals das "Foren-Projekt") und von Marble Theory

Willkommen auf SPPRO, auch dir wird man zu Unity oder zur Unreal-Engine raten, ganz bestimmt.[/Sarkasmus]

9

11.09.2011, 13:06

Und damit ist nicht C++ für Spieleprogrammierer gemeint. *hust*

MfG
Check

Werbeanzeige