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

drakon

Supermoderator

Beiträge: 6 513

Wohnort: Schweiz

Beruf: Entrepreneur

  • Private Nachricht senden

11

10.08.2009, 19:38

Hier bedeutet es, dass CenterA eine Referenz auf ein const Vector2D ist.
Unter anderem wird der &-Operator ebenfalls als Adressoperator,Bitwise AND und in seiner zweifachen Ausführung als logisches UND gebraucht.

12

11.08.2009, 10:36

Zitat von »"Toa"«


Ein Projekt fürs Studium? Ist das für das Softwarepraktikum^^? Der Kollisions-Algorithmus den du hier nutzt nennt sich übrigends Bounding Circle.. Was studierst du wenn man fragen darf?


Klar darf man. Maschinenbau. In der Regel befassen sich die EDV-Aufgaben auch ehr mit Stichprobenprüfungen usw.. Ich hatte jetzt halt das Glück 8) so ein Spiel zu bekommen. Aber ich seh es sportlich ...

Jetzt noch mal eine fachliche Frage: Ist der &-Operator in dem folgenden Code definiert oder muss ich eine Datei dazu einbinden (also ich meine <include> xyz.h). Ich bekomme nämlich ein Haufen solcher Fehlermeldungen: syntax error; found '&' expecting ')'


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
// Berechnung der Kollision zweier Kreise


struct Vector2D_Taube
{
    float x_Taube;
    float y_Taube;
};

struct Vector2D_Projektil
{
    float x_Projektil;
    float y_Projektil;
};

float RadiusA = 10; // Radius Taube

float RadiusB = 3;      // Radius Projektil


float CenterA;
float CenterB;


BOOL APIENTRY CircleHitsCircle(const Vector2D_Taube& CenterA, // Mittelpunkt Kreis A

                      const float RadiusA,     // Radius Kreis A

                      const Vector2D_Projektil& CenterB, // Mittelpunkt Kreis B

                      const float RadiusB)     // Radius von Kreis B

{
    // Wenn die Entfernung der beiden Mittelpunkte kleiner oder gleich

    // der Summe der beiden Radien ist, liegt eine Kollision vor.

    return (CenterA - CenterB).LengthSq() <=
           (RadiusA + RadiusB) * (RadiusA + RadiusB);
}


Danke mal wieder


------------------------
Bitte verwende für C++ Code entsprechende Tags.
Edit von TrikkieMikkie

drakon

Supermoderator

Beiträge: 6 513

Wohnort: Schweiz

Beruf: Entrepreneur

  • Private Nachricht senden

13

11.08.2009, 11:39

Nein. Der &-Operator (im Sinne der Referenzdeklaration) ist ein Sprachmittel und wird somit von Haus aus unterstützt.

Allerdings könnte man den &-Operator (als Adressoperator) überladen, was bei dir aber nicht der Fall ist.

Zeig doch mal die genaue Fehlermeldung mit der Stelle im Code.

GR-PA

Treue Seele

Beiträge: 326

Wohnort: Daheim

Beruf: Faulenzer

  • Private Nachricht senden

14

11.08.2009, 11:45

Zitat

Ich kenn das & in C nur von fscanf.

Daraus interpretiere ich, dass du in C programmierst (und nicht in C++). Wenn das so ist, dann hättest du das besser in deinem ersten Post mit angegeben. Wenn nicht, dann kannst du diesen Post einfach ignorieren.
In C gibt's keine Referenzen. In C gibt's auch keine benutzerdefinierte Operatoren und in C gibt's keine Elementfunktionen. Deshalb wird dieser Code in C niemals funktionieren.
Signaturen werden überbewertet

15

11.08.2009, 12:05

Zitat von »"GR-PA"«

Zitat

Ich kenn das & in C nur von fscanf.

Daraus interpretiere ich, dass du in C programmierst (und nicht in C++). Wenn das so ist, dann hättest du das besser in deinem ersten Post mit angegeben. Wenn nicht, dann kannst du diesen Post einfach ignorieren.
In C gibt's keine Referenzen. In C gibt's auch keine benutzerdefinierte Operatoren und in C gibt's keine Elementfunktionen. Deshalb wird dieser Code in C niemals funktionieren.


Ja richtig, ich progge in C. Ich dachte ich hätte es angegeben aber habe nur WinApi angegeben. Dumm gelaufen, mein Fehler.
Was muss verändern, dass es bei mir läuft?

Grüße

drakon

Supermoderator

Beiträge: 6 513

Wohnort: Schweiz

Beruf: Entrepreneur

  • Private Nachricht senden

16

11.08.2009, 12:10

Hehe. OK. Da haben wir uns alle wohl missverstanden. :)

In C kannst du Zeiger benutzen, anstatt Referenzen. Dann musst du einfach noch dran denken die Adressen zu übergeben und nicht das Objekt.

C-/C++-Quelltext

1
2
3
4
BOOL APIENTRY CircleHitsCircle(const Vector2D_Taube* const CenterA, // Mittelpunkt Kreis A

                      const float RadiusA,     // Radius Kreis A

                      const Vector2D_Projektil* const CenterB, // Mittelpunkt Kreis B

                      const float RadiusB)     // Radius von Kreis B 

GR-PA

Treue Seele

Beiträge: 326

Wohnort: Daheim

Beruf: Faulenzer

  • Private Nachricht senden

17

11.08.2009, 13:31

Und du darfst in deiner Funktion nicht die beiden Mittelpunkte voneinander subtrahieren. Der Code der Funktion muss dann ungefähr so aussehen:

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
struct Vector2D
{
float x;
float y;
};
BOOL APIENTRY CircleHitsCircle(const Vector2D* const CenterA, // Mittelpunkt Kreis A

                      const float RadiusA,     // Radius Kreis A

                      const Vector2D* const CenterB, // Mittelpunkt Kreis B

                      const float RadiusB)     // Radius von Kreis B 

{
    return ((CenterA->x-CenterB->x)* (CenterA->x-CenterB->x)+(CenterA->y-CenterB->y)*(CenterA->y-CenterB->y)) <= ((RadiusA+RadiusB)*(RadiusA+RadiusB));
}
Signaturen werden überbewertet

18

11.08.2009, 13:55

Zitat von »"GR-PA"«

Und du darfst in deiner Funktion nicht die beiden Mittelpunkte voneinander subtrahieren. Der Code der Funktion muss dann ungefähr so aussehen:

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
struct Vector2D
{
float x;
float y;
};
BOOL APIENTRY CircleHitsCircle(const Vector2D* const CenterA, // Mittelpunkt Kreis A

                      const float RadiusA,     // Radius Kreis A

                      const Vector2D* const CenterB, // Mittelpunkt Kreis B

                      const float RadiusB)     // Radius von Kreis B 

{
    return ((CenterA->x-CenterB->x)* (CenterA->x-CenterB->x)+(CenterA->y-CenterB->y)*(CenterA->y-CenterB->y)) <= ((RadiusA+RadiusB)*(RadiusA+RadiusB));
}


Hallo,

danke erstmal. Ich habe den Code so übernommen, bekomme aber immernoch die selben Fehler. Ich hab mal ein Screenshot gemacht, so dass ihr die Fehler sehen könnt:


(Link)


Grüße

GR-PA

Treue Seele

Beiträge: 326

Wohnort: Daheim

Beruf: Faulenzer

  • Private Nachricht senden

19

11.08.2009, 17:23

versuch doch mal, die Strukturen nicht als Zeiger, sondern als Werte zu übergeben. Das ist zwar nicht ganz so effizient, tut's aber auch

C-/C++-Quelltext

1
2
3
4
BOOL APIENTRY CircleHitsCircle(Vector2D CenterA, // Mittelpunkt Kreis A

                              float RadiusA,     // Radius Kreis A

                              Vector2D CenterB, // Mittelpunkt Kreis B

                              float RadiusB)    // Radius von Kreis B
Signaturen werden überbewertet

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

20

11.08.2009, 17:49

Was für einen Compiler verwendest du denn? Evtl. kann der kein const...

Werbeanzeige