nichtstatischer Memberverweis (Class)

lain

Grünschnabel
Hallo Leute,

ich habe vor einiger Zeit damit begonnen mich mit C++ zu beschäftigen und als einstieg ein kleines Spiel zu programmieren. Dafür verwende ich Visual Studio 2010 und SDL 2.0. Seit kurzem versuche ich nun classes in meinem Programm unterzubringen und bin dabei auf ein paar Schwierigkeiten gestoßen.

ich habe der Einfachheit halber mit 2 Classes begonnen. Die erste nennt sich "object" , die zweite "player".
Danach habe ich den beiden allgemeine Daten über ihre Position zugeteilt (pos.x, pos.y). Jetzt habe ich aus der Klasse object/player ein object1/player1 erstellt und deren Position über eine if-Abfrage miteinander verknüpft.

C++:
if(object1.pos.x == player1.pos.x)
{
  collision = true,printf ("ok");
}

Soweit so gut das hat auch alles super geklappt nur habe ich nicht vor für jedes object/player eine separate Abfrage zu starten.

Nun zu meinem Problem: Versuche ich direkt diese beiden Klassen miteinander in Relation zu stellen gibt er mir diese Fehlermeldung: "Ein nicht statischer Memberverweis muss relativ zu einem bestimmten Objekt sein"

C++:
if(object.pos.x == player.pos.x)
{
collision = true,printf ("ok");
}

Blöderweise will ich mich ja gerade nicht auf ein bestimmtes Objekt beziehen. Quasi ein allgemein gültige if-Abfrage egal ob es sich dabei um player1 oder 1000 handelt.

Ich würde mich freuen wenn mir jemand ein simples code-beispiel oder einfach nur das Prinzip das dahinter steht erklären könnte.

Der Übersicht halber lass ich mal den weiteren Programmteil raus. Ich denke die grundlegende Problematik ist verständlich und ich möchte ja nur das Prinzip dahinter verstehen.. Aber wenn es aus irgendwelchen Gründen notwendig ist kann ich das hier noch einfügen.
 
Zuletzt bearbeitet von einem Moderator:
Hallo,

eine Klasse ist nur eine Vorlage, während deren Objekte die wirklich existierenden Daten sind. Es macht daher keinen Sinn (und funktioniert auch nicht) Klassenmember ohne intanziiertes Objekt zu verwenden. Einzige Ausnahme sind statische Klassenmember, die allerdings dann für alle Objekte immer den gleichen Wert haben.

Wenn du in deinem Programm unterschiedliche Player-Objekte und Object-Objekte verwendest, musst du diese auch alle separat instanziieren. Da es sich aber um gleichartige Objekte handelt, kannst du die Instanzen in ein Array oder eine dynamische Datenstruktur (z.B. std::vector) stecken und über eine Schleife den Vergleich durchführen.

Gruß
MCoder
 
Ich sitze schon eine ganze Weile an diesem Problem und hatte irgendwie gehofft nicht ganz auf dem Holzweg zu sein..

Arrays hatte ich noch gar nicht berücksichtigt, das hilft mir echt weiter. Danke
 

Neue Beiträge

Zurück