我的问题确实说明了一切,但我会重申这个问题。
在A类中,有一个我想要访问的受保护变量(向量)。
B类是A类的子类,在其构造函数中,可以根据需要访问和添加此向量。
但是,在C类(它是A类的子类)中,我想在它的构造函数中添加这个向量,但编译器告诉我。
这是我的代码:
A类:
class ClassA
{
protected:
std::vector<Object *> myVector;
};
B组:
class ClassB : ClassA, AnotherClass
{
public:
ClassB()
{
this->myVector.push_back(new Object);
}
}
C类:
class ClassC : public ClassB
{
public :
ClassC()
{
this->myVector.pushBack(new Object);
}
}
有人能告诉我,由于C ++的限制或我的代码,我正在做什么是不可能的吗?
一如既往地谢谢。
答案 0 :(得分:1)
ClassB
私下继承ClassA
。这意味着所有继承的成员都是private
到ClassB
,因此无法在ClassC
中访问。
解决方案取决于您的要求,这些要求未在您的问题中说明。它可以像使用公共继承一样简单:
class ClassB : public ClassA, AnotherClass
另一种方法是给ClassB
一个公共或受保护的成员函数,允许修改ClassC
中的向量。
答案 1 :(得分:1)
将ClassB
更改为:
class ClassB : public ClassA, AnotherClass
{
public:
ClassB()
{
this->myVector.push_back(new Object);
}
}
答案 2 :(得分:0)
问题是ClassB只“导入”了ClassA的私有成员。
为了使您的代码能够正常工作,您希望在ClassA的前面加上“受保护”或“公共”,以便为您定义ClassB,如下所示:
class ClassB : protected ClassA, AnotherClass
答案 3 :(得分:0)
问题是你没有为子类classB声明什么类型的继承classA。以下代码为我编译就好了。 (将继承更改为public classA)
class classA{
protected:
int a;
};
class classB : public classA{
public:
classB()
{
this->a = 0;
}
};
class classC : public classB
{
public:
classC()
{
this->a = 1;
}
};