Ich versuche, ein SDL-Minispiel zu machen, und ich habe ein Problem, wenn ich versuche, einen Vektorzeiger aus einer anderen Klasse aufzurufen. Das Problem ist, dass das Ergebnis ein leerer Vektor ist, wenn ich die Funktion aufruft.C++ Aufruf an (Vektor-) Zeiger von einer anderen Klasse Rückgabe leere Größe
In dieser Klasse I
jeden Rahmen drawBoss nennenclass badBoss {
public:
struct fire {
int type, x, y;
float v, vx, vy;
int angle;
};
std::vector<fire> vFire;
std::vector<fire> *pvFire = &vFire;
void drawBoss(SDL_Renderer *ren) {
vFire.push_back(fire({0,cP1.x+20,cP1.y,cP1.w,cP1.h,v}));
}
};
In dieser Klasse versuche ich vFire Zeiger zu erfassen, aber die Größe ist immer 0.
class colision {
public:
badBoss _boss;
void detectColision() {
std::vector<badBoss::fire> lala = *_boss.pvFire;
std::cout << lala.size() << std::endl;
}
};
dies ist der Haupt meines Spiels
int main() {
colision _colision;
bool aktibo = true;
while(aktibo) {
_badBoss.drawBoss(ren);
_colision.detectColision();
}
return 0;
}
Wie kann ich richtig den Wert des Zeigers bekommen?
EDIT: Dank Ihrer Vorschläge konnte ich es beheben. Das war das Problem: In der Kollisionsklasse machte ich eine neue Instanz auf BadBoss, und natürlich, wenn ein Aufruf zu vFire Vektor immer 0 war.
Jetzt rufe ich zu Kollision von der Hauptfunktion mit der richtigen Instanz wie parametre und .... walllaaa !! Alles läuft perfekt!
Warum haben Sie den Vektor und einen Zeiger auf den Vektor als öffentliche Membervariablen? Haben Sie versucht, auf den Vektor zuzugreifen, indem Sie direkt in 'detectCollision()' auf den Vektor zugreifen? – user463035818
Ein mögliches Szenario ist, dass die 'BadBoss' -Instanz, auf die Sie in' _boss.pvFire' zugreifen, nicht die gleiche ist wie die, die Sie 'drawBoss' nennen. – molbdnilo
hi @ tobi303, ich bin neu in C++. Ich habe die zwei Variablen wie öffentlich, weil ich auf sie von anderer Klasse zugreifen möchte. Und ich versuche auch direkt aus der Kollisionsklasse auf sie zuzugreifen, ist aber nicht dieselbe Variable. Es ist immer leer –