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

Sizzla

Frischling

  • »Sizzla« ist der Autor dieses Themas

Beiträge: 72

Wohnort: Klagenfurt

  • Private Nachricht senden

1

23.10.2009, 09:07

Problem bei Struktur

Guten Morgen allerseits :)

Ich habe folgendes Problem:
Ich möchte eine Struktur haben wo alle Paraeter eines Spielers drin stehen.
Anschließend erstelle ich eine Instanz dieser Struktur und möchte auch die xPos und die yPos des Spielers ändern, was natürlich nicht funzt weil die struktur iwie nur "static const" werte akzeptiert.

Wie kann ich das am besten lösen?

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
//Alle Parameter eines Objektes sind in dieser Struktur

struct S_SpielerInfo
{
    bool besetzt;
    static const int xPos = 5;
    static const int yPos = 3;
};
    
//Instanzen und Funkionsprototypen

S_SpielerInfo Spieler;

void FeldAnzeigen();

using namespace std;

void main()
{
    bool Abbruch = true;

    while(Abbruch != false)
    {
    FeldAnzeigen();
    Spieler.xPos =+ 1;
    }
    system("PAUSE");
}
Künstliche Intelligenz ist leichter zu ertragen als natürliche Dummheit !
--------------------------
http://www.kasser-manuel.com

Steven77

Alter Hase

Beiträge: 515

Wohnort: Münster - Gievenbeach

Beruf: Wissenschaftlicher Mitarbeiter

  • Private Nachricht senden

2

23.10.2009, 09:15

Re: Problem bei Struktur

Das "static const" wird deshalb verlangt, weil du die Werte bereits in der Struktur fest vordefinierst. Mach es vielleicht so:

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
//Alle Parameter eines Objektes sind in dieser Struktur 

struct S_SpielerInfo
{
    bool besetzt;
    int xPos;
    int yPos
};
    
// [...]


//Instanzen und Funkionsprototypen 

S_SpielerInfo Spieler;

// [...]


Spieler.xPos = 5;
Spieler.yPos = 3;


Bzw. mit Konstruktoren:

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
//Alle Parameter eines Objektes sind in dieser Struktur 

struct S_SpielerInfo
{
    bool besetzt;
    int xPos;
    int yPos

    S_SpielerInfo()
        : xPos( 5 ), yPos( 3 )
    { }

    S_SpielerInfo(int x, int y)
        : xPos( x ), yPos( y )
    { }
};
    
// [...]


//Instanzen und Funkionsprototypen 

S_SpielerInfo Spieler;
Kommen Sie nie mit einem Schwert zu einer Schießerei.

Sizzla

Frischling

  • »Sizzla« ist der Autor dieses Themas

Beiträge: 72

Wohnort: Klagenfurt

  • Private Nachricht senden

3

23.10.2009, 09:43

Danke, hat funktioniert :o
Künstliche Intelligenz ist leichter zu ertragen als natürliche Dummheit !
--------------------------
http://www.kasser-manuel.com

4

23.10.2009, 15:46

Re: Problem bei Struktur

Ein paar Bemerkungen am Rande:

C-/C++-Quelltext

1
void main()
Das ist nicht korrektes C++. Richtig wäre int main().

C-/C++-Quelltext

1
while(Abbruch != false)
Du kannst auch einfacher while (!Abbruch) schreiben. ;)

C-/C++-Quelltext

1
2
3
4
5
6
7
    S_SpielerInfo()
        : xPos( 5 ), yPos( 3 )
    { }

    S_SpielerInfo(int x, int y)
        : xPos( x ), yPos( y )
    { }
Ich würde die Variable besetzt auch gleich initialisieren. Ich bezweifle ausserdem, dass ein Standardkonstruktor hier so viel Sinn macht. Vielleicht besser so:

C-/C++-Quelltext

1
2
3
4
5
6
SpielerInfo::SpielerInfo(bool besetzt, int xPos, int yPos)
: besetzt(besetzt)
, xPos(xPos)
, yPos(yPos)
{
}

Je nachdem, ob ein Feld anfangs automatisch besetzt sein soll, kann man das Verhalten noch anpassen. Angewandt sähe das obere Beispiel so aus:

C-/C++-Quelltext

1
SpielerInfo a(true, 5, 3);

Ach ja, das S_ als Präfix für Strukturen halte ich wie so viele Dinge der Ungarischen Notation für unnötig, da es nicht wirklich Informationen liefert. Ausserdem verunmöglicht einem das Typensystem in C++ die Wahl von Bezeichnern, die ihren Typen immer gleich über den Namen enthalten. Man wird mit der Zeit gezwungen, inkonsistent zu werden.

David_pb

Community-Fossil

Beiträge: 3 886

Beruf: 3D Graphics Programmer

  • Private Nachricht senden

5

23.10.2009, 16:19

Re: Problem bei Struktur

Zitat von »"Nexus"«


C-/C++-Quelltext

1
void main()
Das ist nicht korrektes C++. Richtig wäre int main().


Doch, das ist korrektes C++, solang der Compiler die Signatur unterstützt...

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

6

23.10.2009, 16:24

Nein, der C++ Standard verlangt dass der return Wert von main() int ist (§3.6.1 Absatz 2)

7

23.10.2009, 16:28

Re: Problem bei Struktur

Zitat von »"David_pb"«

Doch, das ist korrektes C++, solang der Compiler die Signatur unterstützt...
Nein, das stimmt nicht. Es ist schlicht nicht standardkonform und war es im Übrigen auch nie.

Zitat von »"3.6.1/2"«

An implementation shall not predefine the main function. This function shall not be overloaded. It shall
have a return type of type int
, but otherwise its type is implementation-defined.

David_pb

Community-Fossil

Beiträge: 3 886

Beruf: 3D Graphics Programmer

  • Private Nachricht senden

8

23.10.2009, 16:31

Zitat von »"dot"«

Nein, der C++ Standard verlangt dass der return Wert von main() int ist (§3.6.1 Absatz 2)


Les den Absatz noch zuende:

Zitat


[...] This function shall not be overloaded. It shall have a return type of type int, but otherwise its type is implementation-defined.


Es wird nur verlangt das der Compiler zwei Definitionen unterstützen muss (int main() und int main(int argv, char* argc[]). Aber der Compiler darf auch ruhig weitere Signaturen unterstützen, das macht den Code nicht zu fehlerhaftem C++. Allerdings aber zu nicht portablem.

9

23.10.2009, 16:36

Zitat von »"David_pb"«

Les den Absatz noch zuende:

Zitat


[...] This function shall not be overloaded. It shall have a return type of type int, but otherwise its type is implementation-defined.


Es wird nur verlangt das der Compiler zwei Definitionen unterstützen muss (int main() und int main(int argv, char* argc[]). Aber der Compiler darf auch ruhig weitere Signaturen unterstützen, das macht den Code nicht zu fehlerhaftem C++. Allerdings aber zu nicht portablem.
Lies ihn du lieber genau. :p

Der Rückgabewert ist auf int festgelegt, Punkt. Was implementation-defined sein kann, ist "otherwise its type", also der Rest des Funktionstyps. Konkret sind damit die Parameter gemeint.

Der Compiler darf also wie du sagst weitere Signaturen mit dem Namen "main" unterstützen. Doch der Rückgabetyp gehört nicht zur Signatur.

David_pb

Community-Fossil

Beiträge: 3 886

Beruf: 3D Graphics Programmer

  • Private Nachricht senden

10

23.10.2009, 16:38

Hm... Stimmt, wenn mans so auslegt. :-) Ok, ok... Ich hab das but geflissentlich überlesen. :-P

Werbeanzeige