2011-03-15 6 views
3

다음을 수행하려고합니다. "변수"값만 전달하지 않고 참조를 매개 변수로 사용하는 함수를 호출합니다. 내 컴파일러 (gcc)가 임시 "변수"를 보내면 안됩니까? mvc가 그것을하는 것처럼 보일 것입니다 (프로젝트의 다른 사람이 그것을 사용합니다).임시 변수가없는 참조가 아닌 참조로 전달

내가 가진 :

foo(Vector&,Vector&) 

는 때마다 나는

어떻게해야합니까 no matching function for call to foo(Vector,Vector); note: candidates are foo(Vector&,Vector&)를 얻을 수 foo(Vector(1,2,3),Vector(4,5,6)) 전화하려고? 왜 작동하지 않습니까? 내가 이해하지 못하는 개념이 있습니까?

감사합니다.

+1

이것은 MSVC "확장자"로 잘못된 성가신 사항입니다. – Erik

+0

가능한 복제본 [왜 gcc가 클래스 선언을 참조 인수로 컴파일하지 않습니까?] (http://stackoverflow.com/questions/2530624/why-wont-gcc-compile-a-class-declaration-as-a -reference-argument) – Suma

답변

4

Vector(1,2,3)은 임시로 생성되며 임시는 비구 조 참조에 바인딩 할 수 없습니다.

void foo(const Vector&, const Vector&) 

지금 작동합니다 :

그래서 같이 매개 변수를 const을!

+0

@Downvoter : 무엇이 잘못 되었습니까? 내가 알 수 있도록 설명해주세요! – Nawaz

3

당신은 const를 참조로 전달해야

foo(const Vector&,const Vector&) 

const가 아닌 참조 만 L-값에 바인딩 할 수 있습니다, 일시적으로는 L-값이 아닙니다.

1

임시 변수를 전달하려면 const 참조를 사용하십시오.

관련 문제