Да, я прочитал много уроков и вопросов, а также перепробовал множество комбинаций, но, похоже, это не сработало.
Моя цель — не использовать динамическое распределение.
Мои занятия выглядят так:
Pages
Page
PMain:Page
PCam:Page
на моей главной, когда я делаю это:
1.
главный:
Page * page;
PCam main;
main.setContext(context);
page = &main;
page->echo();
Результат: PCam
но когда я пытаюсь создать экземпляр внутри внешнего класса и указать его на странице, это не удается.
2.
класс страниц:
Pages::Pages(Page*& page, Context& context){
this->context = &context;
PMain main;
main.setContext(*this->context);
main.echo();
// page = &main; <---
}
главный:
Page * page;
Pages pages(page, context);
page->echo();
результат: страница
ожидаемый результат: PCam
Мои занятия:
Страница:
void Page::setContext(Context & context)
{
this->context = &context;
}
void Page::echo() //virtual
{
std::cout << "echo Page" << std::endl;
}
PMain:
void PMain::echo(){
std::cout << "echo PMain" << std::endl;}
}
PCAM:
void PCam::echo(){
std::cout << "echo PCam" << std::endl;}
}
Любая помощь будет оценена. Благодарю.
Ваша проблема или одна из них заключается в следующем:
Pages::Pages(Page*& page, Context& context){
[...]
PMain main;
является локальной переменной стека Когда эта функция возвращается, она перестает существовать.
Если вы присвоили его указателю, вы получите неопределенное поведение используя его.
Моя цель — не использовать динамическое распределение.
Если у вас нет какой-либо конкретной причины, это в основном бессмысленная цель. Если вы хотите указатель на объект стека (то есть объект, который не выделяется динамически), этот объект должен оставаться в области действия до тех пор, пока вы используете указатель. Если вы не можете этого сделать, то вам нужно поместить его в кучу (т.е. динамически распределять).