访问抽象基类的受保护数据成员时遇到问题。说我有以下结构:
class A {
public:
//func_xy()=0;
//...
protected:
int id;
//...
};
现在我继承自抽象基类A:
class B: public A {
public:
func_xy();
//...
private:
void func_b();
std::vector<A*> vec_a;
//...
};
//...
void B::func_b() {
A& _a = *vec_a[0];
//doesn't work, class A has no member named ‘_a‘...
int id1 = this->_a.id;
//doesn't work, expected unqualified-id before ‘(’...
int id2 = this->(_a.id);
}
如果我使用指针而不是引用,则问题仍然存在。 获取受保护的数据成员有什么技巧吗?
答案 0 :(得分:3)
通过更改
修复了编译错误 int id1 = this->_a.id;
到
int id1 = _a.id;
你会发现它仍然无效。问题是_a
是A
,而不是B
。作为B
的成员函数,您只有A
的基础才能访问B
的受保护成员。
因此,您可以轻松访问this->id
- 但无法访问id
的{{1}}。
你需要:
_a