C++ 用新的集合对象替换集合对象
我有一个带有私有字段的类:C++ 用新的集合对象替换集合对象,c++,C++,我有一个带有私有字段的类: std::set<std::string> _channelNames; 在setter函数中,如何用setter函数传递的字段替换private _channelNames字段 我试过: void Parser::setChannelNames(std::set channelNames) { this->_channelNames = channelNames; } 但这在VS2005中产生了一个错误: Error 2 err
std::set<std::string> _channelNames;
在setter函数中,如何用setter函数传递的字段替换private _channelNames字段
我试过:
void Parser::setChannelNames(std::set channelNames) {
this->_channelNames = channelNames;
}
但这在VS2005中产生了一个错误:
Error 2 error C2679: binary '=' : no operator found which takes a right-hand operand of type 'std::set' (or there is no acceptable conversion) parser.cpp 61
我绝对是C++新手,我希望我应该在这里做一些指针工作。 有什么快速提示吗
谢谢 您只需专门化模板。如果没有专门化,就不能使用std::set
void Parser::setChannelNames(const std::set<std::string> & channelNames) {
this->_channelNames = channelNames;
}
您只需要专门化模板。如果没有专门化,就不能使用std::set
void Parser::setChannelNames(const std::set<std::string> & channelNames) {
this->_channelNames = channelNames;
}
这应该是std::set而不是普通的std::set吗?噢,这是个好主意。真不敢相信我错过了!按引用传递not value const std::set&,以避免该值的额外副本param@SteveTownsend:这是最常见的建议,但在某些情况下,通过传递值并移动复制的对象,代码可以同样高效,在这种情况下,按照当前标准,移动意味着_channelNames.swapchannelNames。这并不比const引用版本的效率低,如果参数是右值表达式的结果,也就是说,如果要在末尾进行复制,就让编译器从一开始就为您进行复制。这应该是std::set而不是普通的std::set吗?噢,很好。真不敢相信我错过了!按引用传递not value const std::set&,以避免该值的额外副本param@SteveTownsend:这是最常见的建议,但在某些情况下,通过传递值并移动复制的对象,代码可以同样高效,在这种情况下,按照当前标准,移动意味着_channelNames.swapchannelNames。这并不比const引用版本的效率低,如果参数是右值表达式的结果,那么效率可能会更高,也就是说,如果要在末尾进行复制,只需让编译器从一开始就为您进行复制。