2016-07-09 19 views
0

Ich verstehe nicht, warum in diesem Beispiel kann ich nicht ein Funktionselement zugreifen, indem dereferencing das ObjektVerwendung von Dereferenzierungsoperator in diesem Beispiel (C++)

Hier ist der relevante Teil des Codes

class Search 
{ 
public: 
void run(); 

private: 
Result* result; 
Result* extractResults() 
}; 

die extractResults() ist definiert als

Result* Search::extractResults() 
{ 
Result* ris; 
//as soon as i know the size, i initialize ris 
ris = new Result[numOfResults]; 
return ris; 
} 

Innerhalb des run() Funktion folgt, i extractResults Aufruf einen Zeiger auf das interne ris Objekt

zu erhalten
result = extractResults(); 

Nun, ich würde erwarten, dass das "Ergebnis" für den Zugriff auf Objekt, innen run(), wie folgt aus:

result[4]->doSomething(); 

Aber es funktioniert nicht, ich

verwenden müssen
result[4].doSomething(); 

Warum ist das?

EDIT

Ok, modifizierte ich den Code, um den Dereferenzierungsoperator nutzen zu können. Ich weiß, dass es in dieser Situation nicht notwendig ist, Zeiger zu verwenden, ich habe es einfach als Übung benutzt.

class Search 
{ 
public: 
void run(); 

private: 
Result** resultPP; 
Result* resultP; 
Result* extractResults() 
}; 

Result* Search::extractResults() 
{ 
Risultato* ris; 
//as soon as i know the size, i initialize ris 
ris = new Risultato[numOfResults]; 
return ris; 
} 

Innerhalb der Funktion run() i

resultP = extractResults(); 
resultPP = &resultP; 

Jetzt können Sie endlich:

resultPP->doSomething(); 

Ich weiß, es ist chaotisch, ich es einfach tun wollte, wie diese, als eine Möglichkeit, vom Lernen. danke!

+2

Da result [4] keinen Zeiger zurückgibt, ist es ein Verweis auf ein Element des Arrays. (In diesem Fall ist das Ergebnis [4] gleichbedeutend mit '* (Ergebnis + 4)' – Borgleader

Antwort

2

result ist ein Zeiger auf ein Array von Risultato. Daher sind die Objekte innerhalb von result tatsächlich Werttypen. Wenn Sie wirklich den Dereferenzierungsoperator verwenden möchten, müssen Sie result als Zeiger auf ein Array von Zeigern zu Resultato deklarieren. Ich hoffe das hilft.

+0

Danke! Ich füge die Lösung meinem Post hinzu :) – rekotc

+0

Ich habe meine Lösung hinzugefügt, danke nochmal @bhzag – rekotc