簡體   English   中英

C ++如何將'this'傳遞給指針引用

[英]C++ how to pass 'this' to pointer reference

我有主類,我喜歡將其指針引用傳遞給我創建的對象,但它給了我錯誤:

錯誤1錯誤C2664:'GameController :: GameController(GameLayer *&)':無法將參數1從'GameLayer * const'轉換為'GameLayer *&'

我在GameLayer中有什么(主要對象)

m_pGameController = new GameController(this);

在GameController中我有這個構造函數

GameController(GameLayer*& GameLayer)
{
 setGameLayer(gameLayer); // to GameLayer memeber ) 
}

resone是我需要能夠從GameController修改GameLayer中的數據(GUI的東西)

我不知道你為什么使用*&但是如果你這樣做會很好:

GameController(GameLayer* GameLayer)
{
 setGameLayer(gameLayer); // to GameLayer memeber ) 
}

首先,類型this可能是GameLayer * constconst GameLayer * const取決於成員函數是否是const或沒有。 但是,它是一個const指針。

話雖如此,對指針type *&ref意味着您將修改指針,即指向它的對象。

“因為,這個指針是一個常量指針,你不能在引用上下文中將它指定給非const指針(GameLayer * p)”。

在以指針引用的情況下,不能分配到將修改值的參考this 你不能將它指定給non-const指針( GameLayer *&p)的引用,但你可以指定一個const指針的引用,即GameLayer *const &p

因此,將構造函數更改為GameController(GameLayer * const & gameLayer)應該可行。
但我目前沒有看到它在這里有任何用處。

如果你從const成員函數調用,那么thisconst *const類型,所以你必須將它改為GameController(const GameLayer * const & gameLayer)

'this'是指針常量,因此您可以將其作為引用或const引用傳遞。

 m_pGameController = new GameController(*this);

 GameController(GameLayer& GameLayer) {}

“沒有名字的想法”的回答幾乎可以肯定你所需要的,但是對於其他信息你的代碼不起作用的原因是GameLayer*&並不僅僅意味着,“我可以修改由GameLayer引用的對象參數值我收到“,它的意思是”我傳遞了一個指向我可以修改的GameLayer對象的指針,我也可以使用這個引用來改變指針值本身“。

例如:

void foo(GameLayer *&layerptr) {
    layerptr = new GameLayer();
}

void main() {
    GameLayer *ptr = 0;
    std::cout << (void*)ptr << "\n";
    foo(ptr);
    std::cout << (void*)ptr << "\n";
}

main ptr變量的值已更改。 這就是pass-by-const-reference的用途,所以你不需要在這里傳遞非const-reference。 傳遞指向GameLayer對象(類型為GameLayer* )或引用(類型為GameLayer& )的GameLayer& ,而不是兩者。

它之所以是無效傳遞this到接受功能GameLayer*&是, this不是一個變量,它可以不被分配到-在C ++行話它不是左值,所以你不能把左值參考它。 this告訴你當前成員函數被調用了什么對象,並且你不能突然決定你的成員函數從現在開始將在另一個對象上運行。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM