是的我已经阅读了很多教程和问题,并尝试了很多组合,但似乎没有用。 我的目标不是使用动态分配。
我的课程如下:
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();
结果:Page
预期结果: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;}
}
任何帮助将不胜感激。谢谢。
答案 0 :(得分:1)
您的问题或其中之一是:
Pages::Pages(Page*& page, Context& context){
[...]
PMain main;
是本地堆栈变量。当此函数返回时,它将不复存在。 如果您已将其指定给指针,则可以使用它来获取未定义的行为。
我的目标不是使用动态分配。
除非你有某些具体原因,否则这是一个毫无意义的目标。如果需要指向堆栈对象的指针(即,未动态分配的对象),只要使用指针,该对象就必须保留在作用域中。如果你不能这样做,那么你需要把它放在堆上(即动态分配)。