use*_*617 2 c++ iterator stl const set
消息是我制作的课程.我在main函数中有一组它们传递给messageTimeOut(以及其他一些函数).在使用itorator的messageTimeOut中,我循环遍历它们并访问不同的成员函数.但是,我只能访问迭代器指向的Message的const成员函数.如果我尝试访问非const成员函数,我会收到错误:
"在函数中'void messageTimeOut(threadParameters*)':main.cpp:74:33:错误:将'const Message'作为'void Message :: setTimedOut(bool)'的'this'参数传递'丢弃限定符[-fpermissive]. "
有意义的是我无法访问const Message对象的非const成员函数,但是我如何使它成为一个非const的Message对象,以便我可以访问非const成员函数并更改Message?谢谢
我的部分代码:
[ . . . ]
void messageTimeOut( threadParameters* params )
{
set<Message>::iterator it = params->messages->begin();
[ . . . ]
for ( ; it != params->messages->end(); ++it )
{
if ( (it->createdTime() + RESPONSE_WAIT) < GetTickCount() )
{
it->setTimedOut(true); // error
}
}
ReleaseMutex(sentQueueMutex);
}
[ . . . ]
int main()
{
threadParameters rmparameters;
set<Message> sentMessages;
[ . . . ]
rmparameters.logFile = &logFile;
rmparameters.socket = socketDesciptor;
rmparameters.messages = &sentMessages;
[ . . . ]
messageTimeOut( rmparameters );
[ . . . ]
return 0;
}
Run Code Online (Sandbox Code Playgroud)
你不能.
std :: set中的元素总是不变的,因为否则用户可以通过修改属于该集合的元素来修改集合中的排序.
请注意,您调用的函数不会更改排序并不重要,因为std :: set无法检查它.
解决此问题的常用方法是从集合中删除元素,修改它,然后重新插入.另一种方法是使用地图,即使这可能会迫使你复制一些数据.
| 归档时间: |
|
| 查看次数: |
1742 次 |
| 最近记录: |