Я только начал изучать C++, и сейчас я работаю с указателями. Я не понимаю, почему происходит следующее.Указатели на C++; ошибка сегментации:
Итак, скажем, у меня есть два класса 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 и вызвать процесс() и печать() функции. На выходе я получаю: 5 (это правильно), 5 (что правильно) и ошибка сегментации. Может ли кто-нибудь помочь мне понять, почему это происходит? Согласно моему нынешнему пониманию указателей, я делаю правильную вещь?
INT основной (аннулируются) {
B b_object();
b_object.process();
b_object.print();
}
Просто, чтобы сделать это ясно, у меня есть файл хиджры и B.h где я декларировать "ИНТ значение а;" и "A * a;" соответственно. И я знаю, что это можно сделать гораздо проще, без указателей, но я стараюсь, чтобы узнать, как здесь работают указатели: D
Вы потеряли точки с запятой после определений классов, и вы не должны использовать 'Class :: Method' _inside_ определение класса. –
Я редактировал код для форматирования, оставив ошибки нетронутыми. –
@MartinshShaiters: Нет, нет. –