我无法将头文件中定义的此映射的添加值用作类成员函数的受保护属性。
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;
}
答案 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));
}