C++ Can';t访问对象属性

C++ Can';t访问对象属性,c++,object,reference,C++,Object,Reference,我有一个目标函数的问题 我有一个属性为贴图的对象: #ifndef PARSER_H #define PARSER_H #include <iostream> #include <fstream> #include <map> #include <string> #include "../stopwords/stopwords.h" #include "../porter/porter.h" class Parser{ private:

我有一个目标函数的问题

我有一个属性为贴图的对象:

#ifndef PARSER_H
#define PARSER_H

#include <iostream>
#include <fstream>
#include <map>
#include <string>
#include "../stopwords/stopwords.h"
#include "../porter/porter.h"

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();

public:
    void destroy();

public:     

    void agregar_termino_a_hash(std::string termino,std::string nombre_archivo);
public:

    void cargar_terminos(std::string linea,std::string nombre_archivo);

};

#endif //PARSER_H

#include <iostream>
#include <fstream>
#include <map>
#include <stdlib.h>
#include <string>
#include "parser.h"
#include <string.h>

using std::map;
using std::string;
using std::ifstream;
using std::cout;
using std::endl;
using std::ofstream;

void Parser::agregar_termino_a_hash(string termino,string nombre_archivo){

unsigned int size = termino.size();

if(dicc_stopwords[termino] == 1) return; //No entra porque es un stopword

unsigned int ultimo_char = stem((char*)termino.c_str(),0,size-1); 

termino = termino.substr(0,ultimo_char+1);

if(!((*hash_frecuencias_locales)[termino])){
    hash_frecuencias_locales[termino] = 1;
    if(hash_frecuencias_globales[termino]){
        (*hash_apariciones_unicas).erase(termino);
        hash_frecuencias_globales[termino]++;
    }
    else{
        cant_terminos++;
        hash_frecuencias_globales[termino] = 1;
        (*hash_apariciones_unicas)[termino] = nombre_archivo;
    }
}else
    hash_frecuencias_locales[termino]++;
}
#ifndef解析器
#定义语法分析器
#包括
#包括
#包括
#包括
#包括“./stopwords/stopwords.h”
#包括“./porter/porter.h”
类解析器{
私人:
无符号整数不能_文档;
无符号整数不能\ u终端;
映射dicc_停止字;
std::全球地图;
std::maphash_frecuencias_locales;
std::映射哈希值;
公众:
解析器();
公众:
无效销毁();
公众:
void agregar_termino_a_hash(std::string termino,std::string nombre_archivo);
公众:
void cargar_terminos(std::string linea,std::string nombre_archivo);
};
#endif//PARSER\u H
#包括
#包括
#包括
#包括
#包括
#包括“parser.h”
#包括
使用std::map;
使用std::string;
使用std::ifstream;
使用std::cout;
使用std::endl;
使用std::of流;
void解析器::agregar_termino_a_hash(字符串termino,字符串nombre_archivo){
无符号整数大小=termino.size();
if(dicc_stopwords[termino]==1)返回;//没有包含停止字的字符
unsigned int ultimo_char=stem((char*)termino.c_str(),0,大小为1);
termino=termino.substr(0,ultimo_char+1);
如果(!(*hash_frecuencias_locales)[termino])){
hash_frecuencias_locales[termino]=1;
if(术语){
(*hash_aparicions_unicas).擦除(termino);
杂烩[总称]++;
}
否则{
cant_terminos++;
hash_frecuencias_globales[终端]=1;
(*hash_apariciones_unicas)[termino]=nombre_archivo;
}
}否则
hash_frecuencias_locales[termino]++;
}
但我经常会遇到这样的错误:

没有为后缀“++”声明“运算符++(int)”

或者类似于:


与“操作员”不匹配在…

中,这一行永远不会起作用

if(!((*hash_frecuencias_locales)[termino])){
  hash_frecuencias_locales[termino] = 1;
根据这一定义:

std::map<std::string,std::map<std::string,unsigned int> >hash_frecuencias_locales;
std::maphhash_frecuencias_locales;
我的编译器同意我的意见(在清理文件后…)

$g++测试映射pb.cpp
test_map_pb.cpp:在成员函数“void Parser::agregar_termino_a_hash(std::string,std::string)”中:
test_map_pb.cpp:63:64:erreur:“stem”未在此范围内声明
unsigned int ultimo_char=stem((char*)termino.c_str(),0,大小为1);
^
test_map_pb.cpp:68:7:erreur:与“operator*”不匹配(操作数类型为“std::map”)
如果(!(*hash_frecuencias_locales)[termino])){
^
test_map_pb.cpp:69:39:erreur:operator='不匹配(操作数类型为'std::map::mapped_type{aka std::map}'和'int')

试着做一个简单的例子,你会发现你的问题并不是你想的那样。

请发布真正的错误描述。另外-你是否有
#include
?并且在类声明后缺少
,这会导致一些奇怪的错误消息。请显示准确的代码,而不显示“do something”部分和所有相关声明。发布代码,如上所述,它应该可以工作。你是对的!我没有修改它!(代码是从以前的Verton复制的)
$ g++ test_map_pb.cpp
test_map_pb.cpp: In member function ‘void Parser::agregar_termino_a_hash(std::string, std::string)’:
test_map_pb.cpp:63:64: erreur: ‘stem’ was not declared in this scope
 unsigned int ultimo_char = stem((char*)termino.c_str(),0,size-1);
                                                                ^
test_map_pb.cpp:68:7: erreur: no match for ‘operator*’ (operand type is ‘std::map<std::basic_string<char>, std::map<std::basic_string<char>, unsigned int> >’)
 if(!((*hash_frecuencias_locales)[termino])){
       ^
test_map_pb.cpp:69:39: erreur: no match for ‘operator=’ (operand types are ‘std::map<std::basic_string<char>, std::map<std::basic_string<char>, unsigned int> >::mapped_type {aka std::map<std::basic_string<char>, unsigned int>}’ and ‘int’)