【发布时间】:2014-07-28 15:36:22
【问题描述】:
我有以下一段代码,一个函数试图将对集合中的对象的引用 (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? -
@DavidSchwartz 因为是的 :-p 无论如何,我不知道该集合是隐式常量,我的错。以下是显而易见的。谢谢大家。
标签: c++ iterator parameter-passing pass-by-reference