다음 코드를 사용할 때 왜 컴파일 오류가 계속 발생하는지 알 수 없습니다.임시 개체 및 비 const 참조
간단한 구조와 초기화 도우미 기능 :
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;
}
및 구조 사용 방법 : 내가 컴파일 오류가 다음과 같은 init 함수를 사용하려고하면 지금
void TexturePolygon::setColor(ccColor4F &color);
을 .
poly->setColor(ccc4f(1.f, 1.f, 1.f, 1.f));
const가 아닌 lvalue를 참조 'ccColor4F'을 입력 할 수 (일명 '적인 Cocos2D :: _ ccColor4F')이 유형의 임시에 바인딩 할 수 없습니다 'ccColor4F'나는 매개 변수를 변경해야
오류를 피하기 위해 setColor를 "const 참조"로 변경하십시오. 임시 객체는 const 참조에 바인딩되어야한다는 것을 이해합니다. 하지만이 경우에는 인라인 함수이므로 임시 객체가 있어서는 안됩니다. 내가 놓친 게 있니?
감사합니다. 로랑은
왜 '인라인'이 여기에 어떤 차이가 있을지 모르겠습니다. –
''inline'은 여러 번역 단위로 함수를 정의 할 수있게 해줍니다 (많은 컴파일러에서 호출을 인라인해야합니다). 호출이 인라인되거나 강제적 인 의미를 변경하지 않습니다. 참조 인수는 최적화 된 경우에도 여전히 참조로 간주됩니다. –
@FredLarson 필자는'inline'이 호출의 의미를 변경했을 것이라고 생각했습니다. –