И снова плохо сформулированный вопрос, но я не знаю, как вкратце объяснить эту ситуацию:C++ Как получить указатель на текущий объект в другом классе?
У меня есть два класса. Назовем их A и B. A имеет много переменных-членов и методов. B - это структура, которая имеет shared_pointer для объекта типа A. Теперь A имеет метод, который возвращает экземпляр B (с указателем на текущий экземпляр A).
Моя проблема заключается в том, что A является подклассом C. C имеет тот же метод, что и описанный выше, как чистый виртуальный. Код будет выглядеть следующим образом:
class C {
public:
virtual B mymethod() const =0;
virtual int getMyvar() const =0;
};
class A : public C {
public:
B mymethod() const override;
int getMyvar() const override; //outputs myvar
private:
int myvar;
};
struct B {
std::shared_ptr<C> pointer;
};
B A::mymethod() const {
B instance;
instance.pointer = std::make_shared<A>(*this); //is this wrong?
return instance;
}
Мой компилятор (GCC 4.8.2) создает исполняемые файлы для следующего кода, но во время выполнения я получаю «ошибка сегментации (ядро сбрасывали)»:
void AnotherClass::something() const {
A object;
B instance = object.mymethod();
std::cout << instance.pointer->getMyvar(); //dumps the core womehow?
}
Я читал о std::enable_shared_from_this, но я не мог понять, как это работает или помогает мне.
Почему я могу получить сообщение об ошибке и как это исправить?
объект.mymethod(); // у вас отсутствует вызов функции – tp1
да, hah ... = D Нет, это простой пример. Мой сценарий слишком сложный для публикации, но этот пример объясняет это хорошо. Я не могу добраться до исходного объекта в моем случае ... = ( – Byomeer
ОК, извините, отредактирован XD Просто забыли, но ошибка все еще там = ( – Byomeer