[英]Returning a global object from a function in C++
我試圖使函數返回一個我擁有的3個全局對象中的一個,具體取決於收到的參數,但是出現以下錯誤:從臨時類型的非常量引用'block&'的無效初始化'塊'。
我對C ++和引用不是很熟悉,但是我嘗試了不同的方法,但似乎沒有任何效果。 正確的方法是什么?
當然,我想要的是將實際選擇的全局對象從getBlock傳遞到ModifyBlock以便對其進行修改; 最后,程序應打印“ IT WORKS!”。
#include <string>
#include <iostream>
using namespace std;
class block
{
public:
string blockId;
block (string id);
};
block::block(string id)
{
blockId=id;
}
block A = block("A");
block B = block("B");
block getBlock (string b)
{
if(A.blockId==b)
return A;
else return B;
}
block modifyBlock (block &x)
{
x.blockId="IT WORKS!";
}
int main ()
{
string b;
cout<<"Which block? ";
cin>>b;
modifyBlock(getBlock(b));
cout<<endl<<getBlock(b).blockId;
}
該函數簽名:
block getBlock (string b)
表示您正在按值返回一個block
對象。 您返回一個全局block
對象的副本。 當這樣使用時:
modifyBlock(getBlock(b));
之所以失敗,是因為該函數的參數是臨時參數,並且不能綁定到非常量左值引用。 看來您想在此處返回引用( block&
):
block& getBlock (string b)
{ // ^
return A.blockId == b ? A : B;
}
只需修改功能
block getBlock (string b)
{
if(A.blockId==b)
return A;
else return B;
}
以下方式
block & getBlock( const string &b )
{
if(A.blockId==b)
return A;
else return B;
}
您將要更改對象A或B,不是它們的副本,不是嗎?
對於錯誤,您正在將函數getBlock返回的臨時對象傳遞給函數ModifyBlock。 臨時對象只能與常量引用綁定。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.