访问派生类中受基类保护的数据成员向量时出现错误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 } {}

我不明白为什么?我可能会做一些非常愚蠢的事情,-在错误上帮助我,我真的很感激

bc是不同的实例,默认情况下矢量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; 
}

该错误只是越界违规,因此是未定义的行为。在该线路之后

C c;

矢量c.v为空。因此std::cout << v[0]尝试访问一个不存在的元素。

最新更新