![](/img/trans.png)
[英]no known conversion for argument 1 from ‘const pcl::PCLPointField’ to ‘const int&’
[英]pass by reference : no known conversion for argument 6 from 'int' to 'int&'
我有一個函數,我通過引用傳遞參數,因為我希望函數編輯它。 在幾個地方調用此函數,我只關心在特定實例調用時的ref值。 偽代碼:
test_fn(int a, int b, inc , int d, int e, int& ref)
{
//bunch of other functionalities
//.
//.
ref = (a*b+c)*(d+e);
}
test_fn(1,2,3,4,5,0)//everywhere that I do not care about ref
int value = 0;
test_fn(1,2,3,4,5, value)//I care about value here and would use it in the remainder of the code .
為什么我不能直接傳遞0? 我嘗試傳遞一個NULL,並且有一個long int到int轉換錯誤。
為什么這是錯的? 在這里實現預期結果的最佳方法是什么?
一個常規的int&
意味着它需要已經分配給一個變量; 它需要是一個lvalue
。
0
未分配給變量; 它是一個“自由變量”,這意味着它與標簽無關。 這意味着它是一個rvalue
,一個未綁定到變量的臨時變量。 它由int&&
表示。
如果你使它成為const int&
則可以將rvalue
轉換為lvalue
。 有意義的是,常量可以轉換為reference to int constant
的reference to int constant
(從右到左閱讀)。
但是,這將是毫無意義的,因為你想修改變量; 因此,答案是遵循自己的約定,不要傳遞那些尚未存在的東西並綁定到標簽/名稱,如常量或移動變量。
考慮這個更簡單的例子:
test_fn(int& ref)
{
ref = 3;
}
int main() {
test_fn(0);
}
這實際上是嘗試將0設置為3.即:
int main() {
0 = 3;
}
但那是胡說八道。 int &
(而不是const int&
)只能接受可修改的東西。
(正如@ nogeek001指出的那樣, const int&
並且不允許我們修改ref。)
為了通過引用傳遞變量,它必須存在,傳遞0或NULL
意味着你發送一個常量。 您無法編輯常量的值,因為它實際上不是變量。
至於解決你的問題,你應該使用指針來實現它,然后檢查指針是否設置為0, NULL
或者你是否使用C ++ 11, nullptr
正如其他人所說,你不能傳遞文字作為參考。
你可以做的是傳遞一個地址,然后檢查函數中是否為NULL:
test_fn(int a, int b, inc , int d, int e, int* ref)
{
int someValue = (a*b+c)*(d+e);
if ( ref )
*ref = someValue;
}
//...
test_fn(1,2,3,4,5,0);
int value = 0;
test_fn(1,2,3,4,5, &value)
ref是引用而不是指針。 如果是,則可以傳遞0,表示指向null的指針; 引用不能指向任何內容,必須綁定到左值。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.