2011-12-14 3 views
0

Я знаю, что это основной вопрос на C++, но могу ли я узнать, как я могу вызвать значение функции/pass (elementId) из одного класса в другой в bada, используя функцию друга?Как вызвать функцию/передать значение из одного класса в другой в bada с помощью функции друга C++

В моем классе формы у меня есть listView, и когда элемент в элементе listView был нажат, я хотел бы передать elementId в detailForm, чтобы отобразить информацию на ярлыке (в detailForm). В моих form.h и .cpp я включил detailForm.h, могу ли я узнать, как получить доступ к функции в detailForm, чтобы отобразить информацию? В form.h, я также объявил

friend class detailedForm; 

и когда я пытался использовать один из функции в detailedForm в моем классе формы, а именно displayInfo(); класс формы имеет ошибку, говорящую, что displayInfo() не был объявлен.

form.h

... 
public: 
    friend class ChartFormDetail; 

Вот мой код form.cpp

#include "Form.h" 
#include "ChartFormDetail.h" 
... 

void 
Form::OnGroupedListViewItemStateChanged(Osp::Ui::Controls::GroupedListView &listView, int groupIndex, int itemIndex, int elementId, Osp::Ui::Controls::ListItemStatus state) 
{ 
    Frame* pFrame = Osp::App::Application::GetInstance()->GetAppFrame()->GetFrame(); 
    FormMgr* pFormMgr = dynamic_cast<FormMgr*> (pFrame->GetControl("FormMgr")); 

    if(pFormMgr == null) 
    return; 

    pFormMgr->SendUserEvent(FormMgr::REQUEST_DETAILFORM, null); 
    //pFormMgr->SendUserEvent(elementId, null); 


    switch(elementId) 
     { 
     case ID_FORMAT_STRING_M12: 
      DisplayLabel(); 
      break; 
... 
     case ID_FORMAT_STRING_F19: 
      DisplayLabel(); 
      break; 
     } 
} 

detailedForm.h

public: 
... 
    void DisplayLabel(void); 

код detailedForm.cpp

void 
ChartFormDetail::DisplayInfo(void) 
{ 
    pLabel->SetText("Text here"); 
    RequestRedraw(); 
} 
+0

Просьба указать соответствующий код. Оставьте все, что не связано с проблемой. –

+0

Привет, я разместил код, как указано выше. Благодаря! – Winona

+0

Вы говорите, что ошибка возникает при вызове 'displayInfo', но нет вызова' displayInfo' в отправленном вами коде. –

ответ

0

Как вы пытаетесь вызвать displayInfo() в своем классе? Для доступа к нему нужен объект «detailForm». Кроме того, если вам нужен доступ к данным listView в вашем классе friend (detailForm), вам понадобится ссылка на объект listView.

Если вы ищете пример, чтобы увидеть, как используются друг функции, вы можете проверить: http://www.learncpp.com/cpp-tutorial/813-friend-functions-and-classes/

+0

Я вызвал displayInfo() в моем списке listView: OnGroupedListViewItemStateChanged (...). – Winona

+0

Чтобы вызвать ChartFormDetail :: displayInfo(), вам нужен объект класса ChartFormDetail. Возможно, вы напрямую вызываете displayInfo без использования его объекта. Это догадка на моем конце, поскольку вы не разместили код для формы :: displayLabel. Надеюсь, это поможет. –

0

Похоже displayInfo является членом-функцией CharFormDetail. Это означает, что вы должны называть его экземпляром ChartFormDetail.

Чтобы заставить его работать, вам нужно сделать что-то вроде этого:

ChartFormDetail & details = getDetails(); 
details.displayInfo(); 

Это просто пример. Я не знаю, как вы получите экземпляр ChartFormDetails, это сильно зависит от вашей архитектуры.

+0

извините, но как я могу это назвать? Но я объявил «класс друзей ChartFormDetail» в моей форме. H – Winona

+0

Я отредактировал свое сообщение, чтобы объяснить немного лучше. Я не могу дать вам лучший ответ, поскольку я не знаю, как структурировано ваше приложение. –

+0

Что вы подразумеваете под тем, как мое приложение структурировано? Хорошо, скажем, я хочу передать elementId класса form в класс chartformdetail, а затем из класса chartformdetail, зная, что elementId должен отобразить правильный текст для этого в метке.Как я полагаюсь на это? Извините за все эти основные вопросы, я все еще учусь. Благодарим за терпение и руководство! – Winona