gpt4 book ai didi

c++ - 从 C++ 中的函数返回全局对象

转载 作者:行者123 更新时间:2023-11-30 01:17:39 27 4
gpt4 key购买 nike

我正在尝试创建一个函数,该函数根据接收到的参数返回我拥有的 3 个全局对象之一,但出现以下错误: 从类型为“block”的临时类型中对类型为“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));

它失败了,因为函数的参数是临时的,不能绑定(bind)到非常量左值引用。看起来您想在此处返回引用 (block&):

block& getBlock (string b)
{ // ^
return A.blockId == b ? A : B;
}

关于c++ - 从 C++ 中的函数返回全局对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23918001/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com