我有一份会议清单:
std::list<meeting*> meetings;
Run Code Online (Sandbox Code Playgroud)
我想迭代列表并返回对特定会议的引用:
meeting& day::findMeeting( float StartHour )
{
std::list<meeting*>::iterator it;
for(it = meetings.begin(); it != meetings.end(); it++)
{
if (it->getStartHour() == StartHour)
{
return *it;
}
}
throw no_such_meeting_error;
}
Run Code Online (Sandbox Code Playgroud)
我收到以下错误:
'getStartHour' : is not a member of 'std::_List_iterator<_Mylist>''return' : cannot convert from 'meeting *' to 'meeting &'invalid return type 'meeting **' for overloaded 'operator ->'我还在学习c ++,所以很高兴能够理解我做错了什么.也,
谢谢
Rob*_*obᵩ 13
我有一份会议清单.
不,你没有.你有一个会议指针列表.从那一个误解,你所有的进一步错误流动.
if (it->getStartHour() == StartHour)
Run Code Online (Sandbox Code Playgroud)
如果您有会议列表,此代码将是正确的.如果你有一个会议指针列表是错误的.尝试:
if ((*it)->getStartHour() == StartHour)
Run Code Online (Sandbox Code Playgroud)
下一个:
return *it;
Run Code Online (Sandbox Code Playgroud)
尝试:
return **it;
Run Code Online (Sandbox Code Playgroud)
std::list<meeting> meetings;
Run Code Online (Sandbox Code Playgroud)
我不知道你想要哪一个 - 会议列表或会议指针列表.这与您计划的其余部分的设计有关.我几乎从不保持一个装满指针的容器.
您可能需要一个指针列表,例如,如果您需要多个列表条目来引用同一个会议.("我和Abe在10点开会,与Bob和Chuck在11点开会,然后在10点与Abe再次会面"?)
如果复制a meeting不可能或过于昂贵,您也可能需要一个指针列表.在这种情况下,我建议你使用智能指针而不是裸指针.
要回答你的另一个问题,是的,返回对象的引用是件好事.您需要了解该对象的生命周期; 在销毁之后永远不会通过引用访问对象.