2017-01-13 8 views
0

Ich möchte eine Funktion machen, die ein Objekt aus der Zelle eines Vektors nimmt und modifiziert. Zuerst muss ich diese Zelle durch Bezugnahme auf die Funktion übergeben und ich kann es nicht tun.Wie übergeben Sie die Vektorzelle an eine Funktion in C++?

void circleChoiceOne(Circle& object); 
vector<Shape*> shapeArr; 
int main() 
{ 
    circleChoiceOne(shapeArr[choice]); 
    return 0; 
    system("PAUSE"); 
} 

Der Fehler I erhalten wies die Linie 7, und es sagt: Ein Verweis vom Typ Circle & kann nicht mit einem Wert vom Typ Shape * initialisiert werden.

Antwort

1

Sie können die Referenz nicht mit einem Zeiger initialisieren (es sei denn, es handelt sich um einen Verweis auf einen Zeiger) - genau das, was der Compiler sagt. Ändern Sie entweder die Funktionssignatur, um den Zeiger zu akzeptieren, oder rufen Sie die Funktion mit einem dereferenzierten Objekt auf oder speichern Sie std::ref im Container. Dies ist in der Annahme, dass Shape ist ein Nachkomme von Circle (die leicht bizzare ist).

Beispiel:

void circleChoiceOne(Circle* object); 

Oder

circleChoiceOne(*shapeArr[choice]); 

Oder

vector<std::ref<Shape>> shapeArr; 
+0

Es funktioniert nicht, heißt es: „keine geeignete Konvertierungsfunktion von "Shape" auf "Circle *" –

3

shapeArr[choice] wird wieder ein Shape* aber die Methode ein Circle& erwartet.

Ich nehme an, dass Circle eine Unterklasse von Shape ist.

werden Sie benötigen ein dynamic_cast die Shape* zu einem Circle* zu niedergeschlagen, dann werden Sie auf einen Wert zu dereferenzieren den Zeiger wollen, so dass Sie es durch Verweis passieren kann.

Sie müssen überprüfen, ob die Shape* Punkte tatsächlich eine Circle bis (als Rectangle oder Torus zu entgegengesetzt) ​​vor dem Gießen und den Fall zu behandeln, wenn es nicht der Fall ist.

+0

existiert ich dynamisches Casting versuchen: "shapeArr [Wahl] = dynamic_cast (* Kreis)," Aber Es steht auf "Circle" - Typ Name nicht erlaubt. –

+0

@YazenVid Ihre Frage, und meine Antwort, betrifft den Zugriff auf ein Element von Ihrem 'Vektor', nicht zuweisen. Auch dieser Code in Ihrem Kommentar wird nicht kompilieren, weil' Circle 'ist ein Typ, keine Variable. – Dai

Verwandte Themen