FooClass.h:
class FooClass {
.
.
.
private:
World *myWorld;
const Player *&player;
.
.
.
}
FooClass.cpp:
FooClass::FooClass(..., World *w) : myWorld(w), player(w->getPlayer())
{
.
.
.
}
这会触发以下错误:Non-const lvalue reference to type 'const Player *' cannot bind to a temporary of type 'Player *'
。然而,类型const Player *
的左值显然是一个常数......
答案 0 :(得分:1)
更改此定义
private:
World *myWorld;
const Player *&player;
到
private:
World *myWorld;
const Player * const &player;
这是一个例子
#include <iostream>
struct A
{
A( const int *p ) : r( p ) {}
const int * const &r;
};
int * foo()
{
return new int( 10 );
}
int main()
{
A a( foo() );
std::cout << *a.r << std::endl;
delete a.r;
}
答案 1 :(得分:1)
当我们谈论const
引用时,我们的意思是它引用的类型是const
。
const Player *&player;
此声明是参考。但它引用的类型是const
吗?不,这不对!它指的是指针,但指针不是const
。只是指针指向const
的某个东西,但这不会使指针本身const
。
要将引用绑定到临时值,您需要创建引用const
。所以你需要这个:
const Player * const &player;
然而,我无法想象为什么你会想要这个。为什么需要引用getPlayer
返回的临时值?当然你只需要一个指针的副本:
const Player* player;
答案 2 :(得分:1)
而不是
const Player *&player;
你需要
const Player * const &player;
^^^^^
能够将引用绑定到临时值。
您收到警告
将参考成员'播放器'绑定到临时值
因为w->getPlayer()
显然是临时的。