Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/76.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 用新的集合对象替换集合对象_C++ - Fatal编程技术网

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引用版本的效率低,如果参数是右值表达式的结果,那么效率可能会更高,也就是说,如果要在末尾进行复制,只需让编译器从一开始就为您进行复制。