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 )
}
问题是我需要能够从GameController(GUI)修改GameLayer中的数据
首先,this
的类型可以是GameLayer * const
或const 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";
}
main
中ptr
变量的值已更改。这就是传递非常量引用的作用,所以这里不需要传递非常量参考。传递指向GameLayer
对象(类型为GameLayer*
)或引用(类型为GameLayer&
)的指针,而不是两者都传递。
将this
传递给接受GameLayer*&
的函数是无效的,因为this
不是一个变量,它不能被分配给——用C++术语来说,它不是一个左值,所以你不能引用它的左值。this
告诉你当前成员函数被调用的对象,并且您不能突然决定从现在起您的成员函数将在不同的对象上运行。
- 如何使用基类指针引用派生类成员
- 将常量指针引用绑定到非常量指针
- 如果非动态变量被指针引用,何时超出范围?
- 转换指针引用的字符串
- 指针引用的生存期(以 C++为单位)
- 从 unique_ptr::get 发送指针作为指针引用进入函数
- 指针/引用的 CLion 格式
- 使用模板专用化来比较指针引用
- 如何保存指向抽象基类的指针/引用,但在 c++ 中仍然可以复制
- C++初始化指针/引用/复制细微差别
- 用数组或指针引用函数?
- 指针范围问题和返回类中封装的指针向量内的指针引用
- 强制转换为指针引用是否会导致未定义的行为
- 访问由 void 指针引用的结构的成员
- C 为什么当先前的步骤引发异常时,std :: shared_ptr的指针引用会被破坏
- 动态指针引用数组由三元运算符返回值,但有异常
- 悬空指向 int 和 char* 常量的指针/引用
- C++ 二维数组和指针引用
- 通过使用指针/引用,在C++中使用向量加快计算速度
- C++非类型模板模板到函数指针/引用