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

1

11.11.2011, 23:24

C++ Veränderbarer lvalue

Heyho, ich bins mal wieder...
Warum wird in diesem Code, "m_Speed" unterstrichen, es steht irgendwas von einem änderbaren lvalue...

C-/C++-Quelltext

1
2
3
4
void C_Shot::update(sf::RenderWindow &window,sf::Sprite &sprite)
{
    m_Speed * window.GetFrameTime() = sprite.GetPosition().y;
}


EDIT: Die genaue Fehlermeldung-> Error: Der Ausdruck muss ein änderbarer lvalue sein.
Only God can judge me.

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »denniro« (11.11.2011, 23:46)


DeKugelschieber

Community-Fossil

Beiträge: 2 641

Wohnort: Rheda-Wiedenbrück

Beruf: Software-Entwickler

  • Private Nachricht senden

2

11.11.2011, 23:46

Weil du gerade Versuchst m_Speed * irgendwas zu rechnen und dann m_Speed einen neuen Wert zuzuweisen. Schreibs so:

C-/C++-Quelltext

1
sprite.GetPosition().y = m_Speed*window.GetFrameTime();


Links vom "=" sind l (left) values. Die müssen änderbar sein. Und a*b = c ist a*b also links und da dies zwei Variablen sind ist dies nicht änderbar. Ich hoffe ich erklär das halbwegs verständlich ^^

3

11.11.2011, 23:49

Weil du gerade Versuchst m_Speed * irgendwas zu rechnen und dann m_Speed einen neuen Wert zuzuweisen. Schreibs so:

C-/C++-Quelltext

1
sprite.GetPosition().y = m_Speed*window.GetFrameTime();


Links vom "=" sind l (left) values. Die müssen änderbar sein. Und a*b = c ist a*b also links und da dies zwei Variablen sind ist dies nicht änderbar. Ich hoffe ich erklär das halbwegs verständlich ^^

Nun ist sprite unterstrichen :S Achja, die selbe Fehlermeldung xD
Only God can judge me.

Haxx0r

Treue Seele

Beiträge: 209

Wohnort: Da!

Beruf: Rebell mit aktivem Lebensstil

  • Private Nachricht senden

4

11.11.2011, 23:49

Der LeftValue-Ausdruck muss eine Variable/Strukturobject/whatever sein. Eine mathematische Operation kann als Ergebnis übergeben werden, allerdings kann ihr kein Wert zugewiesen werden.

Haxx0r

Treue Seele

Beiträge: 209

Wohnort: Da!

Beruf: Rebell mit aktivem Lebensstil

  • Private Nachricht senden

5

11.11.2011, 23:51

Ich kenne SFML nicht, aber normalerweise sollte

C-/C++-Quelltext

1
sprite.GetPosition().y

ein const-integer oder sowas in der Art sein. "y" wird ein private member sein, sodass du keinen Zugriff darauf hast.

6

11.11.2011, 23:53

Okey, habs nun so gelöst:

C-/C++-Quelltext

1
2
3
4
5
void C_Shot::update(sf::RenderWindow &window,sf::Sprite &sprite)
{
float m_yPos = static_cast<float>(sprite.GetPosition().y);
m_yPos = m_Speed*window.GetFrameTime();
}

oder ist das hier besser?:

C-/C++-Quelltext

1
2
3
4
5
void C_Shot::update(sf::RenderWindow &window,sf::Sprite &sprite, float &m_yPos)
{
    m_yPos = static_cast<float>(sprite.GetPosition().y);
    m_yPos = m_Speed*window.GetFrameTime();
}

Danke für eure Hilfe :)
Only God can judge me.

DeKugelschieber

Community-Fossil

Beiträge: 2 641

Wohnort: Rheda-Wiedenbrück

Beruf: Software-Entwickler

  • Private Nachricht senden

7

11.11.2011, 23:56

Brauchst du dafür echt nen static_cast? Ich kenn mich mit diesen ganzen ..._cast quwatsch nicht so gut aus...

Haxx0r

Treue Seele

Beiträge: 209

Wohnort: Da!

Beruf: Rebell mit aktivem Lebensstil

  • Private Nachricht senden

8

11.11.2011, 23:57

1. Warum castest du die y-Position in einen float? Es hat schon seinen Sinn wenn "y" ein Integer ist. Falls das nicht so seien sollte, was auch möglich aber unlogisch ist, brauchst du nicht casten.
2. Du initialisierst die Variable mit dem y-Wert. Aber direkt danach weist du ihr etwas Anderes zu.

9

11.11.2011, 23:57

Brauchst du dafür echt nen static_cast? Ich kenn mich mit diesen ganzen ..._cast quwatsch nicht so gut aus...
Hej, ja denke schon, da ich es in float konvertieren möchte.
Hier ein kleiner Link http://www.cprogramming.com/reference/ty…staticcast.html


EDIT:

Zitat

1. Warum castest du die y-Position in einen float? Es hat schon seinen Sinn wenn "y" ein Integer ist. Falls das nicht so seien sollte, was auch möglich aber unlogisch ist, brauchst du nicht casten.
2. Du initialisierst die Variable mit dem y-Wert. Aber direkt danach weist du ihr etwas Anderes zu.

Ah ok weiß Bescheid xD Das mit der Initialisierung muss ich ändern, hab es mir anders vorgestellt. xD
Only God can judge me.

DeKugelschieber

Community-Fossil

Beiträge: 2 641

Wohnort: Rheda-Wiedenbrück

Beruf: Software-Entwickler

  • Private Nachricht senden

10

12.11.2011, 00:01

Ich weiß schon was ein cast ist und macht, aber reicht in diesem Fall kein einfacher cast "float(...)"?

Werbeanzeige