我正在尝试创建一个函数,该函数根据接收到的参数返回我拥有的 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/