このコードを見てください:
#include <vector>
#include <iostream>
#include <string>
using namespace std;
class A
{
private:
string contentA;
public:
A(){ contentA = ""; };
A( string setContent ){ contentA = setContent; };
virtual string printContent(){ return contentA; };
};
class B: public A
{
private:
string contentB;
public:
B( string setContent ){ contentB = setContent; };
virtual string printContent(){ return contentB; };
};
int main()
{
vector<A*> aPointer;
vector<B> bVector;
B b1("b1");
//store b1 obj in bVector
bVector.push_back( b1 );
//store the current(last) obj address to aPointer for access later
aPointer.push_back( &bVector.back() );
// B b2("b2");
// bVector.push_back( b2 );
// aPointer.push_back( &bVector.back() );
for( vector<A*>::iterator it = aPointer.begin(); it != aPointer.end(); it++ )
{
cout << (*it)->printContent() << endl;
}
}
aPointer は、B ベクトルの要素へのポインターを格納します。
for ループで B ベクトルの 2 番目の要素にアクセスすると、セグメンテーション違反が発生するのはなぜですか?
私は六角形を入れました、そしてそれは再びうまくいきます。