私はC++の勉強を始めたばかりで、今はポインターを使って作業しています。なぜ次のようなことが起こっているのか理解できません。
したがって、2つのクラスAとBがあるとします。Aには整数フィールド(int valueA)があり、Bには(Aへの)ポインターフィールドA*aがあります。以下に両方のクラスを示しました。
class A{
A::A(int value){
valueA = value;
}
void A::displayInfo (){
cout<<A<<endl;
}
}
class B{
B::B(){
a=0;
}
void B::printInfo (){
a -> displayInfo(); //Segmentation fault
}
void B::process(){
A new_A = A(5);
a = &new_A;
new_A.displayInfo(); //correct output
a -> displayInfo(); //correct output
}
}
ここで、メインクラスで、次のことを行います。Bクラスのインスタンスを作成し、process()関数とprint()関数を呼び出します。出力では、5(正しい)、5(正しい)、およびセグメンテーション違反が発生します。誰かが私がこれが起こっている理由を理解するのを手伝ってもらえますか?私の現在のポインターの理解によると、私は正しいことをしていますか?
int main(void){
B b_object();
b_object.process();
b_object.print();
}
これを明確にするために、「intvalueA;」を宣言するAhおよびBhファイルがあります。および「A*a;」それぞれ。そして、私はこれがポインターなしではるかに簡単にできることを知っています、しかし私はここでポインターがどのように機能するかを学ぼうとしています:D