C++如何将'this'传递给指针引用

C++ how to pass 'this' to pointer reference

本文关键字:指针 引用 this C++      更新时间:2023-10-16

我有一个主类,我喜欢将它的指针引用传递到我创建的对象上,但它给了我错误:

错误1错误C2664:"GameController::GameController(GameLayer*&)":无法将参数1从"GameLayer*const"转换为"GameLayer*&"

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

m_pGameController = new GameController(this);

在GameController中,我有这个构造函数

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

问题是我需要能够从GameController(GUI)修改GameLayer中的数据

首先,this的类型可以是GameLayer * constconst GameLayer * const,具体取决于成员函数是否为const。但是,它是一个const指针。

话虽如此,引用指针type *&ref意味着您将修改指针,即它所指向的对象

"由于,此指针是一个常量指针,您无法将其分配给引用的上下文中的非常量指针(GameLayer*p)"。

在引用指针的情况下,您不能分配给将修改this中值的引用。不能将其分配给对non-const指针的引用(GameLayer *&p),但可以将引用分配给const指针,即GameLayer *const &p

因此,将构造函数更改为GameController(GameLayer * const & gameLayer)应该是可行的
但我目前看不出它有任何用处。

如果您从const成员函数调用,那么this的类型为const *const,因此您必须将其更改为GameController(const GameLayer * const & gameLayer)

我不知道你为什么要使用*&,但如果你这样做,它会很好:

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

'this'是一个指针常量,因此您可以将其作为引用或常量引用传递。

 m_pGameController = new GameController(*this);
 GameController(GameLayer& GameLayer) {}

"No Idea For Name"的答案几乎可以肯定是你所需要的,但为了获得更多信息,你的代码不起作用的原因是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";
}

mainptr变量的值已更改。这就是传递非常量引用的作用,所以这里不需要传递非常量参考。传递指向GameLayer对象(类型为GameLayer*)或引用(类型为GameLayer&)的指针,而不是两者都传递。

this传递给接受GameLayer*&的函数是无效的,因为this不是一个变量,它不能被分配给——用C++术语来说,它不是一个左值,所以你不能引用它的左值。this告诉你当前成员函数被调用的对象,并且您不能突然决定从现在起您的成员函数将在不同的对象上运行。