C++ 通过引用c+传递指针+;

C++ 通过引用c+传递指针+;,c++,static,pass-by-reference,pass-by-pointer,C++,Static,Pass By Reference,Pass By Pointer,是的,我读了很多教程和问题,也尝试了很多组合,但似乎不起作用。 我的目标不是使用动态分配 我的课程是这样的: Pages Page PMain:Page PCam:Page 主要是,当我这样做时: 一,。 主要内容: 结果:PCam 但是,当我试图在外部类中创建实例并将其指向页面时,它失败了 二, 页面类别: Pages::Pages(Page*& page, Context& context){ this->context = &context;

是的,我读了很多教程和问题,也尝试了很多组合,但似乎不起作用。 我的目标不是使用动态分配

我的课程是这样的:

Pages
Page
PMain:Page
PCam:Page
主要是,当我这样做时:

一,。 主要内容:

结果:PCam

但是,当我试图在外部类中创建实例并将其指向页面时,它失败了

二,

页面类别:

Pages::Pages(Page*& page, Context& context){
    this->context = &context;
    PMain main;
    main.setContext(*this->context);
    main.echo();
    // page = &main; <---
} 
结果:第页

预期结果:PCam

我的班级:

第页:

void页面::setContext(上下文和上下文)
{
此->上下文=&context;
}
无效页面::echo()//虚拟
{

std::cout您的问题或其中一个问题是:

Pages::Pages(Page*& page, Context& context){
    [...]
    PMain main;
是一个局部堆栈变量。当此函数返回时,它将不再存在。 如果已将其指定给指针,则使用它将获得未定义的行为

我的目标不是使用动态分配


除非您有特定的原因,否则这是一个毫无意义的目标。如果您想要一个指向堆栈对象(即未动态分配的对象)的指针,只要您使用该指针,该对象就必须保持在范围内。如果您不能这样做,则需要将其放在堆上(即动态分配).

请缩进您的代码。您的代码是如何失败的?生成错误吗?崩溃吗?如果生成错误,请编辑您的问题以将其包括在内。如果出现崩溃,请在调试器中运行您的程序。因为
main
在超出范围时(当构造函数完成并退出时)会被销毁。在页面的构造函数中创建一个局部变量main,当离开构造函数作用域时,该变量将被销毁,并将其地址分配给一个指针,在构造函数结束后,该指针将指向可用内存。
PCam main;
建议不要将名称
main
用于程序入口点之外的任何东西。我希望会有一个神奇的解决方案。
Page * page;
Pages pages(page, context);
page->echo();
void Page::setContext(Context & context)
{
    this->context = &context;
}
void Page::echo()  //virtual
{
    std::cout << "echo Page"  << std::endl;
}
void PMain::echo(){
    std::cout << "echo PMain"  << std::endl;}
}
void PCam::echo(){
    std::cout << "echo PCam"  << std::endl;}
}
Pages::Pages(Page*& page, Context& context){
    [...]
    PMain main;