簡體   English   中英

從C ++中的函數返回全局對象

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM