Referenzen und Konstruktoren
-
Hallo und danke für deine Antwort.
Ganz oben verwende ich :
using namespace std;und die Funktion mit dem tempBullet ist die Funktion einer Klasse namens cTower, diese hat auch einen Member:
vector < cBullet > vBullets;Danke nochmal im Voraus
MfG Magellan
-
std::vector setzt voraus, dass die verwendete Klasse einen Default-Ctor und einen operator= hat, das ist bei dir scheinbar nicht der Fall.
-
Okay, ich seh das Problem. Folgendes Minimalbeispiel:
#include <vector> class A { public: A(int &x) : x(x) { } private: int &x; }; int main() { int x = 2; std::vector<A> v; v.push_back(A(x)); // Fehler hier. }Da A einen Referenzmember hat, kann der Compiler keinen Zuweisungsoperator (operator=) für dich erstellen, und da std::vector einen Werttyp braucht, der das Assignable-Konzept erfüllt (also einen solchen Operator hat, siehe 23.1 (3) im Standard), fliegt das ganze auseinander.
Nimm statt der Referenz halt einen Zeiger.
-
Danke, aber wenn ich einen Zeiger verwende, also
cEnemy* AimedEnemy;statt
cEnemy& AimedEnemy;usw.
dann erhalte ich bei
AimedEnemy.dLife -= dDamage;den Fehler
...\main.cpp|407|error: request for member `dLife' in `((cBullet*)this)->cBullet::AimedEnemy', which is of non-class type `cEnemy*'|
Das geschieht in einer Funktion von cBullet. dDamage ist eine Eingenschaft von cBullet.
Zur Information sollte ich aber auch sagen, dass ich zum erstem Mal mit Zeigern arbeite, weil ich gehört/gelesen habe, dass das keine besonders gute Arbeitsweise wäre...
Danke nochmal
MfG
-
...
AimedEnemy->dLife
-
...
(*AimedEnemy).dLife
-
Danke, mit beiden Varianten lässt sich das Projekt kompilieren.
Allerdings stürzt das Programm ab, egal welche der beiden Varianten ich verwende...
-
Wie genau stürzt es ab?
Überprüf doch (z.B. mit dem Debugger), ob der Zeiger
AimedEnemygültig ist. Hast du ihn initialisiert?
-
Hallo, bei
*AimedEnemy = Aim;stürzt er ab.
Wenn ich in die Zeile davor
exit(0);schreib beendet sichs korrekt.
In der Zeile danach, wird exit nicht erreicht.
ogl_c.exe funktioniert nicht mehr
Der Debugger sagt mir:
Process returned -1073741819 (0xC0000005)
Vielen Dank schonmal für deine Hilfe.
MfG
-
AimedEnemy scheint nicht gültig zu sein. Wo initialisierst du die Variable denn?
-
Magellan schrieb:
Hallo, bei
*AimedEnemy = Aim;stürzt er ab.
AimedEnemy = &Aim;*AimedEnemy = Aimwürde voraussetzen dassAimedEnemyvorher schon auf ein gültiges Objekt zeigt, und würde dann den Wert kopieren (operator = aufrufen), und nicht den Zeiger "verbiegen".
DaAimedEnemyvermutlich zu dem Zeitpunkt wo du das aufrufst nicht auf ein gültiges Objekt zeigt, crasht es eben.BTW: ich glaube "aimed" ist falsch in dem Zusammenhang (die Waffe ist "aimed" auf das Ziel, aber auf das Ziel kann man das Wort "aimed" glaube ich nicht anwenden). Ich bin mir nicht sicher, aber ich denke "targeted" könnte das richtige Wort sein.
-
Vielen Dank hustbaer!
Damit funktioniert es. Und auch danke für die hilfreiche Erklärung

PS:
Auch danke für dein BTW. Werd ich mir nochmal überlegen
MfG, und nochmal danke an alle
Magellan
-
hustbaer schrieb:
BTW: ich glaube "aimed" ist falsch in dem Zusammenhang (die Waffe ist "aimed" auf das Ziel, aber auf das Ziel kann man das Wort "aimed" glaube ich nicht anwenden). Ich bin mir nicht sicher, aber ich denke "targeted" könnte das richtige Wort sein.
Target könnte auch reichen
targeted heißt auch wieder "auf jmd/etw gerichtet", wäre also wieder die Waffe...
-
pumuckl schrieb:
hustbaer schrieb:
BTW: ich glaube "aimed" ist falsch in dem Zusammenhang (die Waffe ist "aimed" auf das Ziel, aber auf das Ziel kann man das Wort "aimed" glaube ich nicht anwenden). Ich bin mir nicht sicher, aber ich denke "targeted" könnte das richtige Wort sein.
Target könnte auch reichen
targeted heißt auch wieder "auf jmd/etw gerichtet", wäre also wieder die Waffe...Ja, Target würde reichen.
Ich glaube targeted geht für beides, es gibt auf jeden Fall "targeted by", also "to be targeted by someone" im Sinne von "von jemandem anvisiert werden".
"to be aimed by someone" gibt's auch, aber das bedeutet "von jemandem (auf ein Ziel) ausgerichtet werden", und nicht "von jemandem anvisiert werden".