在类中使用map并通过其他类的get()和set()函数访问值

时间:2018-06-01 08:36:37

标签: c++ dictionary

我无法将头文件中定义的此映射的添加值用作类成员函数的受保护属性。

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 :(得分:2)

你有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

答案 1 :(得分:2)

不需要指针。 它是在@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));
}