2011-03-15 58 views
3

我正在嘗試執行以下操作:調用一個函數,它將參考引用爲參數而不傳遞「變量」,只是值。 我的編譯器(gcc)不能讓臨時「變量」發送進去嗎?似乎mvc以這樣或那樣的方式(項目中的其他人使用它)。傳遞非引用作爲參考,沒有臨時變量

我:

foo(Vector&,Vector&) 

每當我試着打電話foo(Vector(1,2,3),Vector(4,5,6))我得到no matching function for call to foo(Vector,Vector); note: candidates are foo(Vector&,Vector&)

我應該怎麼辦? 它爲什麼不起作用?有一些我不理解的概念嗎?

謝謝。

+1

這是一個MSVC「擴展」,這是一個不正確的麻煩。 – Erik 2011-03-15 16:39:05

+0

[爲什麼不會gcc編譯一個類聲明作爲參考參數?](http://stackoverflow.com/questions/2530624/why-wont-gcc-compile-a-class-declaration-as-a -reference-argument) – Suma 2011-03-15 16:39:59

回答

4

Vector(1,2,3)創建臨時,並且臨時不能綁定到非const參考!

所以使參數const爲:

void foo(const Vector&, const Vector&) 

現在,它會工作!

+0

@Downvoter:它有什麼問題?請解釋,所以我可以知道! – Nawaz 2011-03-15 17:47:32

3

您需要通過爲const參考:

foo(const Vector&,const Vector&) 

非const引用只能綁定到左值,暫時不是L值。

1

如果您想要傳遞臨時變量,請使用const引用。