2011-12-14 3 views
0

이것이 기본적인 C++ 질문입니다.하지만 한 클래스에서 function/pass 값 (elementId)을 어떻게 호출 할 수 있습니까? 친구 기능을 사용하여 다른 바다에서?C++ friend 함수를 사용하여 한 클래스에서 다른 클래스로 함수/패스 값을 호출하는 방법

내 양식 클래스에는 listView가 있고 listView의 항목을 클릭하면 elementId를 detailedForm에 전달하여 (detailedForm의) 레이블에 정보를 표시하고 싶습니다. 내 form.h 및 .cpp에 detailedForm.h를 포함 시켰습니다. 정보를 표시하는 detailedForm의 함수에 어떻게 액세스합니까? form.h에서, 나는 또한

friend class detailedForm; 

을 선언 한 내 폼 클래스, 즉 displayInfo()에 detailedForm의 기능 중 하나를 사용하려고 할 때, 폼 클래스에 displayInfo()가 선언되지 않았다는 오류가 있습니다.

public: 
... 
    void DisplayLabel(void); 

코드

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

은 여기

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

입니다 form.h
+0

관련 코드를 게시하십시오. 문제와 관련이없는 것을 남겨 두십시오. –

+0

안녕하세요, 위와 같이 코드를 게시했습니다. 감사! – Winona

+0

당신은'displayInfo'를 호출 할 때 에러가 발생한다고 말했지만, 게시 한 코드에는'displayInfo'에 대한 호출이 없습니다. –

답변

0

클래스에서 displayInfo()를 어떻게 호출하려고합니까? 액세스하려면 'detailedForm'의 객체가 필요합니다. 또한 friend 클래스 (detailedForm)의 listView 데이터에 액세스해야하는 경우 listView 객체에 대한 참조가 필요합니다.

당신이 친구 기능을 사용하는 방법을 볼 수있는 예를 찾고 있다면, 당신은 체크 아웃 수 : http://www.learncpp.com/cpp-tutorial/813-friend-functions-and-classes/ 그것은 displayInfo처럼 보이는

+0

listView의 fuction : onGroupedListViewItemStateChanged (...)에서 displayInfo()를 호출했습니다. – Winona

+0

ChartFormDetail :: displayInfo()를 호출하려면 ChartFormDetail 클래스의 객체가 필요합니다. 아마도 객체를 사용하지 않고 displayInfo를 직접 호출했을 것입니다. 이것은 Form :: displayLabel에 대한 코드를 게시하지 않았으므로 필자의 추측이다. 희망이 도움이 .. –

0

CharFormDetail의 멤버 함수입니다. 즉, ChartFormDetail 인스턴스로 호출해야한다는 의미입니다. 작동하도록

, 당신은 같은 것을 할 필요가 :

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

이 그냥 예입니다. ChartFormDetails의 인스턴스를 어떻게 얻을지 모르겠다. 아키텍처에 따라 크게 달라진다.

+0

미안하지만, 어떻게 부를 수 있습니까? 하지만 내 form.h에 'friends class ChartFormDetail'을 선언했습니다. – Winona

+0

좀 더 설명하기 위해 내 게시물을 편집했습니다. 나는 당신에게 응용 프로그램이 어떻게 구성되어 있는지 모르기 때문에 당신에게 더 나은 대답을 줄 수는 없습니다. –

+0

내 응용 프로그램의 구조는 무엇을 의미합니까 ?? 좋아, 말하자면, formform 클래스의 elementId를 chartformdetail 클래스에 전달한 다음, chartformdetail 클래스에서 elementId를 알고 레이블에 해당 텍스트를 표시해야합니다.이걸 내가 어떻게 생각해? 이러한 모든 기본적인 질문에 대해 유감스럽게도, 저는 여전히 배우고 있습니다. 양해 해 주셔서 감사합니다. – Winona