C++ - 无法通过引用传递迭代器指向的对象

标签 c++ iterator parameter-passing pass-by-reference

我有以下一段代码,一个函数试图将对集合 (foo) 中对象的引用传递给另一个函数 (goo)。

/**************** working ***************/
{
    std::set<MyStruct> foo;

    MyStruct abc = *foo.begin();
    goo(abc);
}    

int goo(MyStruct & st)
{
    //some code here
}


/**************** not working ***************/
{
    std::set<MyStruct> foo;

    goo( *(foo.begin()) );    
}    

int goo(MyStruct & st)
{
    //some code here
}

错误列表:

>file.cpp:190:45: error: no matching function for call to 'goo(const MyStruct&)'
>file.cpp:190:45: note: candidate is:
>file.h:33:9: note: int goo(MyStruct&)
>file.h:33:9: note: no known conversion for argument 1 from 'const MyStruct' to 'MyStruct&'

第一个版本编译正常,而第二个版本给出了报告的错误。我见过 const 关键字,但我没有在任何地方声明它为 const,而且集合不是 const。你能解释一下我做错了什么吗?

最佳答案

set 包含具有唯一值的不可变对象(immutable对象),但 goo 需要非常量引用。要么更改 goo 以采用 const 引用,要么使用集合以外的内容,要么制作对象的拷贝。只要对象在集合中,它就不能被修改,因此不能传递给修改(或可以修改)对象值的函数。

关于C++ - 无法通过引用传递迭代器指向的对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24998825/

相关文章:

c++ - GDI+ 库导致 "error C2760: syntax error: unexpected token ' 标识符',在 VS2017 中为 XP 编译时预期为 'type specifier'"

c++ - Google 使用全局 vector 测试 ValuesIn

c++ - 是否可以在 C++ 中使用转换迭代器?

delphi - 如何将任何记录(任何类型)传递给Delphi xe7函数作为参数?

c++ - 如何使用唯一指针 vector ?

c++ - 充当多播服务器和客户端的 Linux 套接字

c++ - 对象成员的迭代器 "pointing"

python - 在一系列上下文管理器上友好地使用 Python 可迭代对象

C:将可变数量的参数从一个函数传递到另一个函数

javascript - 显示在 Meteor 中的模板事件中所做的搜索结果