无法让setter工作

时间:2013-12-02 14:19:39

标签: c++ setter

代码:

HEADER

class Parser{

private:
    unsigned int cant_documentos;
    unsigned int cant_terminos;
    std::map<std::string,short> dicc_stopwords;
    std::map<std::string,unsigned int> hash_frecuencias_globales;
    std::map<std::string,std::map<std::string,unsigned int> > hash_frecuencias_locales;
    std::map<std::string,std::string> hash_apariciones_unicas;
public:
    Parser();
    ~Parser();


public:
    void setFrecuenciasGlobales(std::map<std::string,std::map<std::string,unsigned int> > frecuencias);
};

END OF HEADER

.CPP

void Parser::setFrecuenciasGlobales(map<string,map<string,unsigned int> > frecuencias){
hash_frecuencias_globales = frecuencias;
cant_terminos = frecuencias.size();
}

结束CPP

编译器输出:

parser/parser.cpp:102:30: error: no match for ‘operator=’ in ‘((Parser*)this)->Parser::hash_frecuencias_globales = frecuencias’
parser/parser.cpp:102:30: note: candidate is:
/usr/include/c++/4.6/bits/stl_map.h:253:7: note: std::map<_Key, _Tp, _Compare, _Alloc>& std::map<_Key, _Tp, _Compare, _Alloc>::operator=(const std::map<_Key, _Tp, _Compare, _Alloc>&) [with _Key = std::basic_string<char>, _Tp = unsigned int, _Compare = std::less<std::basic_string<char> >, _Alloc = std::allocator<std::pair<const std::basic_string<char>, unsigned int> >, std::map<_Key, _Tp, _Compare, _Alloc> = std::map<std::basic_string<char>, unsigned int>]
/usr/include/c++/4.6/bits/stl_map.h:253:7: note:   no known conversion for argument 1 from ‘std::map<std::basic_string<char>, std::map<std::basic_string<char>, unsigned int> >’ to ‘const std::map<std::basic_string<char>, unsigned int>&’

问题出在哪里?

3 个答案:

答案 0 :(得分:6)

hash_frecuencias_globalesstd::map<std::string,unsigned int>,您正在尝试为其分配std::map<std::string,std::map<std::string,unsigned int> >

void Parser::setFrecuenciasGlobales(map<string,map<string,unsigned int> > frecuencias){
  hash_frecuencias_globales = frecuencias; // oops!

至于按值传递frequencias,这只有在你离开它或调用std::map::swap时才有意义。对于简单的分配,最好通过const引用并避免不必要的副本。

答案 1 :(得分:2)

freceuncias是从stringstringunsigned int的地图的地图:

std::map<std::string, std::map<std::string, unsigned int> > frecuencias

您正尝试将此内容分配到hash_frecuencias_globales,这是一张从stringunsigned int的地图:

std::map<std::string,unsigned int> hash_frecuencias_globales;

这是不可能的,因此错误。也许您只想分配对应于特定键的frequencias部分?


作为附注(并且也由@RichardPlunkett指出),如果您只想检查它们或复制它们的一部分,您应该通过const-reference而不是值传递大对象(如map) - 这将节省一个很多不必要的复制。

答案 2 :(得分:1)

请注意frecuencias的类型,它与hash_frecuencias_globales的地图类型不同。

std::map<std::string,unsigned int> hash_frecuencias_globales;
map<string,map<string,unsigned int> > frecuencias