Вот несколько примеров кода, иллюстрирующих проблему, с которой я сталкиваюсь.Проблема C++ Inheritance приводит к ошибке сегментации
#include <iostream>
using namespace std;
class Foo
{
public:
Foo(int x)
{ m_x = x; }
int getX()
{ return m_x; }
private:
int m_x;
};
class Bar : public Foo
{
public:
Bar(int x) : Foo(x)
{}
//some other stuff
};
int main()
{
Bar* bar = new Bar(5);
cout<<bar->getX()<<endl;
return 0;
}
У меня есть большой проект, над которым я работаю, и у меня подобная ситуация выше. Когда bar-> getX() вызывается, этот указатель равен 0x0, вызывая ошибку сегментации. Я попытался использовать функцию getX для класса Bar, но это не устраняет проблему, этот указатель по-прежнему равен 0x0. Есть идеи? Я понятия не имею, как Google для этого, только нашел людей, имеющих проблемы с виртуальными функциями.
ps. Этот образец работает.
EDIT:
std::cout<<m_engine<<std::endl;
focus_x = m_engine->getX();
Выход: 0x2e6d763638667858 (не NULL), так что это не проблема ...
Я просмотрел код, пытаясь найти проблему, а затем заметил ваш комментарий внизу об этом примере работы. Будет легче, если вы опубликуете код, который не работает, и мы сможем помочь вам разобраться с проблемой. – LeopardSkinPillBoxHat 2010-12-10 03:56:24
это может произойти только в том случае, если «новый» сработает. И вы каким-то образом используете не метательную версию нового – Chubsdad 2010-12-10 04:00:00
@Chubsdad - для «нового», чтобы сбой в приведенном выше примере, вам придется использовать компьютер с * очень * ограниченным Ресурсы. – LeopardSkinPillBoxHat 2010-12-10 04:01:09