Keine geeignete Konvertierung von std::vector<Object *, std::allocator<Object *>>" zu "Objekt" * " vorhanden ist
Nicht sicher, wohin ich gehe falsch.. ich habe zwei Klassen, zum Beispiel so:
class One
{
public:
vector<Object*> myObjects;
};
class Two
{
public:
vector<Object*> * pointertoObjects;
};
Dann möchte ich erstellen Sie einen Zeiger aus pointertoObjects zu myObjects und bin dabei, so wie dieses:
pointertoObjects = &myObjects;
Aber wenn ich versuche, Zugang zu pass durch ein element:
void doFunction(Object * object);
doFunction(pointertoObjects[i])
es gibt mir eine Fehlermeldung:
Error: no suitable conversion function from std::vector<Object *, std::allocator<Object *>>" to "Object *" exists
Wo habe ich geirrt?
- Der compiler sagt dir genau wo das problem ist.
- Ich weiß, aber ich weiß nicht, wie fix! 😀
Du musst angemeldet sein, um einen Kommentar abzugeben.
Dieser behandelt den Zeiger, wie die Adresse, den start einer Reihe von
vector
Objekte und gibt Sie elementi
des Arrays. (Da gibt es nicht ein array, nur einen einzigen Vektor, erhalten Sie ein Undefiniertes Verhalten, wenni
ist nicht null).Wenn Sie möchten, element
i
der Vektor, der Zeiger zeigt, dann ist das:oder mit range-checking und weniger Spielraum für zufällige Fehler:
Sollten Sie sich Fragen, ob Sie wirklich brauchen, so viele Zeiger; Sie kann ganz schön verwirrend.
Beim schreiben
pointertoObjects[i]
Sie sind dereferenzierenpointertoObjects
- und C++ verhält sich wie ein array vonvector<Object*>
, sopointertoObjects[i]
ergibt sich ein (Verweis auf)vector<Object*>
.Um dies zu beheben:
Haben Sie eine einfache "type mismatch". Wenn Sie die array-Indizierung auf
pointertoObjects
, erhalten Sie einen Verweis auf einevector<Object*>
, nicht dieObject *
erforderlichdoFunction
.Möchten Sie wahrscheinlich so etwas wie dieses:
doFunction((*pointertoObjects)[i]);