首页 > 解决方案 > 在派生类中访问基类受保护的数据成员向量给出错误 139

问题描述

它可能已在某处得到回答,但我找不到要搜索的正确单词。

我有基类

class B
{
    protected:
        std::vector<int> v;
    public:
        B(): v{} {}
        void test()
        {
            v.push_back( 10 );
            std::cout << v[0] << std::endl; // prints 10
        }
};

儿童班

class C: public B
{
    public:
        C() {}

       void print() { std::cout << v[0] << std::endl; } // error here

};

主功能

int main() 
{ 

    B b;
    b.test(); // initialized vector 10

    C c;
    c.print(); // error 139 here

    return 0; 
}

如果我在基本构造函数中初始化向量没有错误。

B(): v{ 10 } {}

我不知道为什么?我可能会做一些非常愚蠢的事情, - 帮助我解决错误,我真的很感激。

标签: c++

解决方案


b并且c是不同的实例,并且向量v默认情况下没有任何元素。在这种状态下读取v[0]是读数超出范围,会导致错误。

B::test()函数将某些内容推送到向量,因此调用它将消除此错误。

int main() 
{ 

    B b;
    b.test(); // initialized vector 10

    C c;
    c.test();  // call this to have v in c have something
    c.print(); // error 139 hear

    return 0; 
}

推荐阅读