5

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

错误 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 修改 GameLayer 中的数据(GUI 的东西)

4

4 回答 4

6

首先,类型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).

于 2013-09-01T09:40:02.873 回答
5

我不知道你为什么要使用*&,但如果你这样做,它会正常工作:

GameController(GameLayer* GameLayer)
{
 setGameLayer(gameLayer); // to GameLayer memeber ) 
}
于 2013-09-01T09:05:14.777 回答
1

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

 m_pGameController = new GameController(*this);

 GameController(GameLayer& GameLayer) {}
于 2013-09-01T09:10:23.367 回答
1

“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";
}

ptr变量 in的值main已更改。这就是 pass-by-non-const-reference 的用途,因此您在这里不需要 pass-by-non-const-reference。传递指向GameLayer对象(类型GameLayer*)或引用(类型GameLayer&)的指针,而不是两者。

this传递给接受的函数无效的原因是它GameLayer*&不是this变量并且不能分配给 - 在 C++ 行话中它不是左值,因此您不能对它进行左值引用。this告诉您当前成员函数正在调用哪个对象,并且您不能突然决定您的成员函数将从现在开始对不同的对象进行操作。

于 2013-09-01T09:47:02.233 回答