Использование карт внутри класса и доступ к значениям через функции get () и set () из другого класса - PullRequest
0 голосов
/ 01 июня 2018

Я не могу использовать дополнительные значения, которые эта карта определена в заголовочном файле как защищенный атрибут из функции члена класса.

class xyz{

protected:

    map < string, string > *tagsMap;


public:
    xyz();

    //set Tags
    void addTag(string _tagName, string _tagValue) const;
}


// In cpp class, 

//set new Tags
void xyz::addTag(string _tagName, string _tagValue) const {

    //map < string, string > tagsMap ;
    //gives error until I uncomment above line, but thats local map

    tagsMap.insert(pair<string, string>(_tagName, _tagValue));

    // first insert function version (single parameter):
    tagsMap .insert(pair<string, string>(_tagName, _tagValue));

    for (auto& t : tagsMap )
        cout << "addTag():" << t.first << "=" << t.second << endl;
}

Ответы [ 2 ]

0 голосов
/ 01 июня 2018

Да указатель не был нужен.Это сработало после того, как функция стала неконстантной, как предложено @codekaizer в комментариях выше.

class xyz{

protected:
map < string, string > tagsMap;

public:
xyz();

//set Tags
void addTag(string _tagName, string _tagValue);
}

// В классе cpp

void xyz::addTag(string _tagName, string _tagValue) {
 tagsMap.insert(pair<string, string>(_tagName, _tagValue));
}
0 голосов
/ 01 июня 2018

У вас есть 3 проблемы:

1) Член класса объявлен указателем

Комментируемая строка внутри addTag():

// map < string, string > tagsMap;

Это , а не указатель, поэтому он работает, если вы раскомментируете объявление локальной карты.

Тем не менее, это логически неверно, поскольку он не является членом вашего класса -он затеняет вашего tagsMap члена класса.

Таким образом, вам необходимо объявить tagsMap в вашем xyz классе не -показатель.

map < string, string > *tagsMap;
                   //  ^ remove asterisk '*'

2) Отсутствует точка с запятой после определения класса

Добавьте ; точку с запятой, после определения класса

class xyz {
   ...
}
// ^^^ add semicolon here

3) Функция Const

Удалить const в addTag(), чтобы иметь возможность писать в tagsMap участника класса

void xyz::addTag(string _tagName, string _tagValue) const { .. }
                                                 // ^^^^^ remove const
void addTag(string _tagName, string _tagValue) const;
                                            // ^^^^^ remove const
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...