2014-07-20 1 views
0

Да, я прочитал много уроков и вопросов, а также попробовал много комбинаций, но, похоже, это не сработало. Моя цель - не использовать динамическое распределение.Указатель перехода по ссылке C++

Мои классы выглядеть следующим образом:

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;} 
} 

Любая помощь будет оценена. Благодарю.

+1

просьба отложить свой код. – thebjorn

+0

", но когда я пытаюсь создать экземпляр внутри внешнего класса и укажу его на страницу, он терпит неудачу". - Что это значит? Являются ли 1. и 2. отдельными вопросами? –

+1

* Как * ваш код не работает? У вас возникли ошибки? Вы получаете аварии? Если вы получаете ошибки сборки, отредактируйте свой вопрос, чтобы включить их. Если вы получаете сбои, запустите свою программу в отладчике. –

ответ

1

Ваша проблема, или один из них является то, что это:

Pages::Pages(Page*& page, Context& context){ 
    [...] 
    PMain main; 

является локальным переменным стеком. Когда эта функция возвращается, она перестает существовать. Если вы назначили его указателю, вы получите неопределенное поведение, используя его.

Моя цель - не использовать динамическое распределение.

Если у вас есть какая-то конкретная причина, это в основном бессмысленная цель. Если вам нужен указатель на объект стека (т. Е. Тот, который не динамически выделяется), этот объект должен оставаться в области действия до тех пор, пока вы используете указатель. Если вы не можете этого сделать, вам нужно положить его в кучу (то есть динамически распределить).

+0

Я надеялся, что будет волшебное решение. – jico

 Смежные вопросы

  • Нет связанных вопросов^_^