Ошибка “не матч operator []”, введя данные в map внутри объекта

Я стараюсь сохранять данные в карте внутри объекта и получаю эту ошибку в var [ямс] =val и в var [ямс]:

не матч operator []

header

#include <string>
#include <map>
using namespace std;

class Calculator{
public: 
    void addVal(string name, int val);
    int getVal(string name);
private:
    int memory;
    map <string,int>* var;
};

cpp

#include "Calculator.h"
#include <string>
#include <map>
using namespace std;

Calculator::Calculator():
memory(0), var(new map<string, int>)
{}
void Calculator::addVal(string name, int val){

    var[name]=val;

}

int Calculator::getVal(string name){
    return var[name];

}

Что я врежу?

1
задан 16.11.2016, 10:12
2 ответа
class Calculator{
private:
    map <string,int>* var;
//                  ^
};

Сосредоточись на этой звездочке... благодаря ему, var это указатель. Если доступ к карте делается через указатель, ты был бы должен писать что-то такое что:

void Calculator::addVal(string name, int val){
    (*var)[name]=val;
}

Хотя ты также мог бы делать следующее:

void Calculator::addVal(string name, int val){
    var->operator[](name)=val;
}

Все же все показывает в тот, что ошибка в твоем случае - использование звездочки. Удали это и тогда ты сможешь соглашаться на методы карты без проблем.

Как конечное замечание, он пытается не использовать using namespace в файлах заголовка. В больших программах он может давать тебе проблемы.

Твой исправленный код выглядел бы таким:

class Calculator{
public: 
    void addVal(string name, int val);
    int getVal(string name);
private:
    int memory;
    map <string,int> var;
};

Calculator::Calculator()
  : memory(0)
{ }
void Calculator::addVal(string name, int val){
  var[name]=val;
}

int Calculator::getVal(string name){
  return var[name];
}
3
ответ дан 24.11.2019, 12:35
  • 1
    Прекратившись * он посылает мне ошибку в определении карты var (new map< string, int>) " Не находилась функция coincidente" как он бы это определил?. Спасибо –  Diego Fernando Martinez 16.11.2016, 10:20
  • 2
    Дело в том, что, если ты используешь карту из-за стоимости, не надо называть new. Я издал ответ для enseñ искусство có я говорю исправленный. –  eferion 16.11.2016, 10:21
  • 3
    Ohhh стоит большое спасибо =D –  Diego Fernando Martinez 16.11.2016, 10:24

Если ты это составляешь, он дает тебе ошибки:

  • Функции член addVal и getVal у них нет возврата в заявлении больше, если у них есть она в определении, так что составитель не умеет идентифицировать их.
  • getVal будь объявлен параметром (string, name) и определенный с параметром (string name).
  • Ты определяешь строитель Calculator но ты это не объявляешь.
  • var указатель не объект, чтобы это использовать, ты был бы должен сначала дай снабжать ссылками и потом использовать: (*var)[name] = val и return (*var)[name].

Конечно, ты не удаляешь var в разрушителе.

Ты попробовал составлять или понимать ошибки? Они кажутся достаточно автообъяснительными.

1
ответ дан 24.11.2019, 12:35
  • 1
    Прощение, переместив код, спутало меня в возвратах и в заявлении параметров, но эти 2 находятся хорошо в первоначальном коде, если я не определяю карту как указатель, он посылает мне ошибку в инициализации cpp и не, как делание ее в этом черпаке –  Diego Fernando Martinez 16.11.2016, 10:17
  • 2
    Если ты способствуешь тому, чтобы карта не была меткой, ты это не можешь создавать посредством new в строителе... нормально, что ты ошибки. Попробуй понять ошибки; если ты не понимаешь их из-за того, что в inglé s, перемести их из-за переводчика Google или скажи нам exá ctamente, что у тебя есть ошибка для того, чтобы мы смогли помогать тебе. –  PaperBirdMaster 16.11.2016, 10:24

Теги

Похожие вопросы