Как вызвать функцию/передать значение из одного класса в другой в bada, используя функцию друга С++

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

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

friend class detailedForm;

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

форма.ч

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

подробная форма.h

public:
...
    void DisplayLabel(void);

код для detailForm.cpp

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

person Winona    schedule 14.12.2011    source источник
comment
Пожалуйста, опубликуйте соответствующий код. Уберите все, что не имеет отношения к проблеме.   -  person Björn Pollex    schedule 14.12.2011
comment
Привет, я разместил код, как указано выше. Спасибо!   -  person Winona    schedule 14.12.2011
comment
Вы говорите, что ошибка возникает при вызове displayInfo, но в опубликованном вами коде нет вызова displayInfo.   -  person Björn Pollex    schedule 14.12.2011
comment
Извините, я отредактировал коды.   -  person Winona    schedule 14.12.2011


Ответы (2)


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

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

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

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

person Björn Pollex    schedule 14.12.2011
comment
простите, а как это назвать? Но я объявил «класс друзей ChartFormDetail» в своем form.h - person Winona; 14.12.2011
comment
Я отредактировал свой пост, чтобы объяснить немного лучше. Я не могу дать вам лучший ответ, так как не знаю, как устроено ваше приложение. - person Björn Pollex; 14.12.2011
comment
Что вы имеете в виду под структурой моего приложения?? Хорошо, скажем, я хочу передать elementId класса формы в класс chartformdetail, затем из класса chartformdetail, зная elementId, я должен отобразить правильный текст для этого в метке. Как я должен это делать? Извините за все эти основные вопросы, я все еще учусь. Спасибо за ваше терпение и руководство! - person Winona; 14.12.2011
comment
Для обоих классов .h и .cpp? Сейчас отредактирую и выложу. - person Winona; 14.12.2011
comment
Пожалуйста, не забудьте удалить все ненужные части — я не буду читать сотни строк кода. - person Björn Pollex; 14.12.2011
comment
Ну, в основном коды, которые я выложил, являются основными. Например, все остальные неопубликованные коды связаны со списком. Я просто включу файлы .h - person Winona; 14.12.2011

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

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

person mots_g    schedule 14.12.2011
comment
Я вызвал displayInfo() в моей функции listView: OnGroupedListViewItemStateChanged(...). - person Winona; 14.12.2011
comment
Чтобы вызвать ChartFormDetail::displayInfo(), вам нужен объект класса ChartFormDetail. Вероятно, вы напрямую вызываете displayInfo, не используя его объект. Это предположение с моей стороны, поскольку вы не опубликовали код для Form::displayLabel. Надеюсь, поможет.. - person mots_g; 15.12.2011