【发布时间】:2014-02-05 14:41:38
【问题描述】:
我不明白为什么我在使用以下代码时不断收到编译错误。
一个简单的结构及其初始化辅助函数:
typedef struct _ccColor4F
{
GLfloat r;
GLfloat g;
GLfloat b;
GLfloat a;
} ccColor4F;
static inline ccColor4F ccc4f(const GLfloat r, const GLfloat g, const GLfloat b, const GLfloat a)
{
ccColor4F c4 = {r, g, b, a};
return c4;
}
以及使用该结构的方法:
void TexturePolygon::setColor(ccColor4F &color);
现在,如果我尝试使用下面的 init 函数,我会收到编译错误。
poly->setColor(ccc4f(1.f, 1.f, 1.f, 1.f));
对“ccColor4F”类型(又名“cocos2d::_ccColor4F”)的非 const 左值引用不能绑定到“ccColor4F”类型的临时对象
我必须将 setColor 的参数更改为“常量引用”以避免错误。我知道临时对象必须绑定到 const 引用。但在这种情况下,它是一个内联函数,所以不应该有任何临时对象。我错过了什么吗?
谢谢。洛朗
【问题讨论】:
-
我不知道你为什么认为
inline在这里会有所作为。 -
inline允许您在多个翻译单元中定义函数(对于许多编译器来说,内联调用它是必需的)。它不会强制内联调用,也不会更改其任何语义。引用参数仍被视为引用,即使它已被优化。 -
@FredLarson 我以为
inline会改变调用的语义。