我有以下一段代码,一个函数试图将对集合 (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/