Ich möchte foo Array von Objekten in allen Spam-Methoden verwenden. Zeiger auf Tabelle des Objekts
#include "spam.h"
class Foo: public Bar
{
public:
Foo(Layer* layer)
int getNumber() const;
// Something else
};
class Spam: public Layer
{
Spam();
// some methods
private:
Bar** foo; //here is the problem
};
Diese Methode (natürlich mit einem *) für mich gearbeitet, wenn ich ein Objekt wurde zu schaffen.
void Spam::fun1()
{
Bar **foo = new Bar*[1];
foo[0] = new Foo(this);
//foo[1] = new Foo(this);
//foo[1]->getNumber(); // works correctly
}
void Spam::fun2()
{
//foo[1]->getNumber(); // foo[1] and foo[2] are NULL
foo[0]->getNumber(): // not working at all
}
Aber selbst verwende ich Bar ** foo oder Bar ** foo [2], Xcode mir zeigt, dass ich neue Zeiger erstellt zu widersprechen.
[Bearbeiten] bemerkte ich aus falschen Code Beispiel meine Aufsicht, Danke Jungs.
Sie verwenden nicht "funktioniert ordnungsgemäß" auf eine gesunde Weise. Offensichtlich ist 'foo [1]' ein Out-of-Bounds-Zugriff. –
Jede Anweisung in Ihrem Beispiel, die 'foo [1]' enthält, die "richtig funktioniert", scheint nur zu funktionieren. Es kann jederzeit ohne Grund aufhören zu arbeiten. Dies liegt daran, dass foo nur 1 Element enthält (wegen 'new Bar * [1] '), was bedeutet, dass nur der Index 0 erlaubt ist (für ein Array der Größe N können Sie auf die Indizes 0 bis N-1 zugreifen). Weitere Informationen zu nicht definiertem Verhalten finden Sie unter [Antwort] (http://stackoverflow.com/questions/2397984/undefined-unspecified-and-implementation-defined-behavior). –
Okey, ich stimme zu, das ist meine Schuld, es ist meine sogar foo [0], arbeitet in Spam :: fun1(), aber ich suche nach korrekten Weg, darauf zu zeigen und das gleiche Objekt in Spam :: fun2() zu verwenden mein Problem. – chriss