gpt4 book ai didi

c++ - 无法访问 C++ std::set 中对象的非常量成员函数

转载 作者:太空狗 更新时间:2023-10-29 23:41:30 26 4
gpt4 key购买 nike

Message是我做的一个类。我在传递给 messageTimeOut(和其他一些函数)的主要函数中有一组它们。在使用迭代器的 messageTimeOut 中,我循环遍历它们并访问不同的成员函数。但是,我只能访问迭代器指向的 Message 的 const 成员函数。如果我尝试访问非 const 成员函数,我会收到错误消息:

“In function 'void messageTimeOut(threadParameters*)': main.cpp:74:33: error: passing 'const Message' as 'this' argument of 'void Message::setTimedOut(bool)' discards qualifiers [-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;
}

最佳答案

你不能。

std::set 中的元素始终是常量,否则用户可以通过修改属于集合的元素来修改集合中的顺序。

请注意,您调用的函数不会更改顺序并不重要,因为 std::set 无法检查这一点。

解决此问题的常用方法是从集合中删除元素,修改它,然后重新插入它。另一种方法是使用 map ,即使这可能会迫使您复制一些数据。

关于c++ - 无法访问 C++ std::set 中对象的非常量成员函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10662206/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com