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

标签 c++ function object reference global

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

相关文章:

jquery - jQuery 1.3.1 中的 "elems.sort is not a function"

PHP 函数 'return' 未返回

javascript - 函数返回错误消息不起作用

c++ - 使用getline时如何检测文件结尾?

c++ - 动态选择类中私有(private)成员的类型

c++ - while循环困惑

c - 有没有办法获取在c中调用函数时使用的参数名称

c++ - 将数组本地抛出到 try block

javascript - 无法访问对象值

javascript - 检查对象是否是文本框 - javascript