C++ how to pass 'this' Zeiger auf Referenz
ich habe die main-Klasse, die ich gerne weitergeben Ihre Zeiger Referenz auf die Objekte die ich erstellen aber es gibt mir Fehler :
Fehler 1 error C2664: 'GameController::GameController(GameLayer *&)' :
cannot convert parameter 1 from 'GameLayer *const' to 'GameLayer *&'
was ich in den GameLayer ( Hauptsache )
m_pGameController = new GameController(this);
und in den GameController habe ich in diesem Konstruktor
GameController(GameLayer*& GameLayer)
{
setGameLayer(gameLayer); //to GameLayer memeber )
}
den resone ist, ich muss in der Lage sein, die Daten ändern, in GameLayer von GameController (GUI Sachen)
Wieso braucht es eine Referenz? Ich werde gehen Sie vor und Wette, dass es wohl nicht.
Beachten Sie auch, dass statt einer Variablen, Sie sind mit der Art-name selbst in den Konstruktor.
Bitte vermeiden Sie Zeiger: GameController(GameLayer& GameLayer) und als m_GameController = GameController(*this); - dies gilt nicht auf const-correctness
this
ist nicht ein GameLayer *&
. Es ist entweder ein GameLayer *
oder eine const GameLayer *
je nach der constness des aktuell ausgeführten Methode.Beachten Sie auch, dass statt einer Variablen, Sie sind mit der Art-name selbst in den Konstruktor.
GameController(GameLayer*& GameLayer)
sollte es nicht GameController(GameLayer*& gameLayer)
Bitte vermeiden Sie Zeiger: GameController(GameLayer& GameLayer) und als m_GameController = GameController(*this); - dies gilt nicht auf const-correctness
InformationsquelleAutor user63898 | 2013-09-01
Du musst angemeldet sein, um einen Kommentar abzugeben.
Zuerst die Art des
this
könnteGameLayer * const
oderconst GameLayer * const
je nachdem, ob die member-Funktion istconst
oder nicht. Aber, es ist einconst
Zeiger.Gesagt haben, dass ein Verweis (ein Zeiger
type *&ref
bedeutet, dass Sie ändern der Zeiger, das Objekt, welches es hinweist."Da, dieser Zeiger ist ein konstanter Zeiger, die Sie nicht zuordnen können, die zu einer nicht-const-Zeiger(GameLayer * p)" in der Zusammenhang Verweise.
Im Fall von Referenzen auf Zeiger, die Sie nicht zuordnen können, um eine Referenz ändern Sie den Wert in
this
. Sie kann nicht zuordnen, um einen Verweis auf einenon-const
Zeiger(GameLayer *&p)
, aber Sie können eine Referenz zuweisen einerconst
Zeiger alsoGameLayer *const &p
.So, ändern den Konstruktor
GameController(GameLayer * const & gameLayer)
funktionieren sollte.Aber ich sehe nicht, jede Nutzung ist hier derzeit.
Und wenn Sie den Aufruf von einem
const
member-Funktion dannthis
hat der Typconst *const
so haben Sie, um es zu ändernGameController(const GameLayer * const & gameLayer)
.Konkret: die Menge aller Dinge, die kann verwendet werden, zu initialisieren
GameLayer *
ist identisch mit der Menge aller Dinge, die kann verwendet werden, zu initialisierenGameLayer *const
. Dieconst
in dieser Lage nur beeinflusst, ob Sie zuweisen könnenp
es nicht beeinflussen, was Sie können, initialisieren Sie es mit. Der Unterschied zwischen der InitialisierungGameLayer *&
und initialisierenGameLayer *const&
ist, wie du sagst.Ja, ich bin einverstanden. Aber ist das nicht was oben steht stimmt?
Nein, was du geschrieben hast ist nicht wahr. Der Teil, der nicht wahr ist, "Da dieser Zeiger ist ein konstanter Zeiger, die Sie nicht zuordnen können, die zu einer nicht-const-Zeiger(GameLayer * p), aber zuordnen können Sie es auf einen const-Zeiger (GameLayer * const p)."
Könnten Sie bitte darauf hin, ich bin nicht in der Lage, Sie zu erhalten.
InformationsquelleAutor Uchia Itachi
ich weiß nicht, warum verwenden Sie
*&
aber es wird funktionieren, wenn Sie tun:new GameController(this)
istconst
(das scheint wahr zu sein, in der der Fragesteller der Fall), dannthis
wird einconst GameLayer *
und der Konstruktor vonGameController
(oder eine überlastung), sollte einenconst GameLayer *
.Die Methode ist nicht
const
bei dem Fragesteller der Fall. Man kann sagen, von der Fehlermeldung.this
können vom TypGameLayer * const
oderconst GameLayer * const
.Nein, Sie sind nicht das gleiche.
GameLayer *const
bedeutet, dass der Zeigerconst
aber der Wert, den diese Punkte nicht.href="http://c-faq.com/ansi/constptrconst.html" >jup, Itachi und Sie haben Recht. Ich glaube ich muss mehr Tee.
InformationsquelleAutor No Idea For Name
' dies' ist eine Zeiger-Konstante, also können Sie übergeben Sie es als Referenz oder const-Referenz.
this
als Referenz übergeben*this
als Referenz. Das ist durchaus gültig, aber nicht was die Frage ist.Einig, aber ich verwendete Referenz, denn es ist mehr C++
InformationsquelleAutor alexbuisson
"Keine Idee Für den Namen"'s Antwort ist fast sicher, was Sie brauchen, aber weitere Informationen der Grund, warum der code nicht funktioniert ist, dass
GameLayer*&
bedeutet nicht nur, "ich ändern kann, die GameLayer-Objekt bezeichnet, die durch das argument Wert den ich empfangen", es bedeutet "ich bin übergeben Sie eine Referenz auf einen Zeiger auf eine GameLayer-Objekt, die ich ändern kann, und auch ich kann diesen Verweis zum ändern der Zeiger ein Wert an sich".So zum Beispiel:
Den Wert der
ptr
variable inmain
geändert hat. Das ist was pass-by-non-const-Referenz ist, und so müssen Sie nicht pass-by-non-const-Referenz hier. Entweder übergeben Sie einen Zeiger auf eineGameLayer
- Objekt (TypGameLayer*
) oder eine Referenz (TypGameLayer&
), nicht beide.Der Grund, es ist nicht gültig, pass
this
auf eine Funktion, die akzeptiertGameLayer*&
ist, dassthis
ist nicht eine variable, und es kann nicht zugewiesen werden -- im C++ - jargon, es ist nicht ein lvalue und so können Sie nicht nehmen eine lvalue-Referenz.this
sagt Ihnen, was Gegenstand der aktuellen member-Funktion aufgerufen wird, und Sie sich nicht plötzlich entscheiden, dass Sie Ihre member-Funktion wird von nun an sein Betriebssystem auf ein anderes Objekt.InformationsquelleAutor Steve Jessop