如何从公共函数成员访问地图私有成员
How Do I access a map private member from public function member
基本上我可以从构造函数访问私有地图,但不能
来自其他成员:-(
class FAnagramGenerator {
public:
FAnagramGenerator(){
std::string len2[3] = {"blue", "red", "green"};
std::string len3[3] = {"pink", "orange", "white"};
std::string len4[3] = {"black", "yellow", "brown"};
this->list[2] = len2;
this->list[3] = len3;
this->list[4] = len4;
std::cout << this->list[3][1] << std::endl; // Works!!!
};
std::string getAnagram(int size) const{
std::cout << this->list[size][1] << std::endl; // Doesnt!!
return this->list[size][1];
};
private:
std::map<int, std::string*> list;
};
提前感谢! :-(
你的三个数组:
std::string len2[3] = {"blue", "red", "green"};
std::string len3[3] = {"pink", "orange", "white"};
std::string len4[3] = {"black", "yellow", "brown"};
施工后超出范围,最终会在地图中出现悬空指针。
应改用 std::array
类型的值,这些值提供深层复制。
其他问题:您的成员函数getAnagram const
,而std::map的运算符[]则不是。你必须使用 at(( (或 find((( 代替:
class FAnagramGenerator {
public:
FAnagramGenerator()
: list { // better here in initialization list
{2, { "blue", "red", "green"}},
{3, { "pink", "orange", "white"}},
{4, {"black", "yellow", "brown"}}
}
{
std::cout << this->list[3][1] << std::endl;
}; // <- useless semicolon
std::string getAnagram(int size) const{
std::cout << this->list.at(size)[1] << std::endl;
return this->list.at(size)[1];
}; // <- useless semicolon
private:
std::map<int, std::array<std::string,3>> list;
// ^^^^^^^^^^^^^^^^^^^^^^^^^
};
这与
private
无关。这与const
有关。
使用at
.如果密钥不存在,operator[]
on std::map
将创建它,因此操作员需要非const
访问权限。使用 at
而不是 operator[]
,如果密钥不存在,则会引发异常,这将解决您的问题。
std::cout << this->list.at(size)[1] << std::endl;
return this->list.at(size)[1];
或者,您可以从 getAnagram
中删除 const
限定符,但前一种解决方案更可取。
std::string getAnagram(int size) const{
此代码行中的 const 意味着您不能从函数内部调用任何非 const 函数。
operator[]
(这是隐藏在符号中的函数(是非常量(请参阅C++常量映射元素访问(
相反,你应该使用 std::map::at 来获取元素。
相关文章:
- 这是关于成员访问规则的正确摘要吗
- 为什么我在空指针错误(链表)中获取成员访问权限
- 成员访问是否在空指针上定义C++?
- C++ IDE 不会推断/自动完成对模板类中的 std::array 下标表达式的成员访问
- 为什么类成员数据必须是静态的才能被模板化类的模板化结构成员访问
- 为什么c++允许成员函数定义中实例的私有成员访问
- C/C++ 包含点的宏参数(成员访问运算符)
- 访问说明符(私有/公共/受保护)如何在内部工作(限制成员访问)?
- 如何将超类的受保护成员访问到其派生类. 如果已在派生类中声明了具有相同名称的函数?
- 内部类私有成员访问和封闭的友好性
- 通过 C++ 中的另一个结构成员访问结构
- 具体化 PRVALUES 成员访问的 decltype 行为不正确
- 常量表达式中的静态成员访问
- XVALUE来自类成员访问表达式
- 未经授权的私有类成员访问会产生编译时错误而不是运行时错误?
- 在 c++ 中,为什么 -> 被称为二进制中缀指针成员访问运算符?
- 如何访问模板参数的成员?“成员访问不完整的类型”
- 不明确的可变参数类成员访问
- C 受保护的成员访问
- 将typeID转换为静态成员访问(C )的命名空间