2011-12-14 4 views
0

これは基本的なC++の質問ですが、関数/パス値(elementId)を1つのクラスから友人の機能を使用して、田舎の別の?C++フレンド関数を使用してbadaのあるクラスから別のクラスに関数/パス値を呼び出す方法

私のフォームクラスでは、私はlistViewを持っていて、listViewのアイテムがクリックされたとき、elementIdをdetailedFormに渡して、ラベルの情報を(detailedForm内に)表示したいと思います。私のform.hと.cppにはdetailedForm.hが含まれていますが、情報を表示するにはdetailedFormの関数にどのようにアクセスすればいいのでしょうか? form.hでは、私はまた、

friend class detailedForm; 

を宣言している私は私のフォームクラス、すなわちdisplayInfo()にdetailedForm内の関数のいずれかを使用しようとしたとき、フォームクラスにdisplayInfo()が宣言されていないというエラーがあります。

ここ

... 
public: 
    friend class ChartFormDetail; 

form.hはdetailedForm.cpp

void 
ChartFormDetail::DisplayInfo(void) 
{ 
    pLabel->SetText("Text here"); 
    RequestRedraw(); 
} 
ため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); 

コードのための私のコードです

+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

私のアプリケーションの構造はどういう意味ですか? [OK]を言うと、フォームクラスのelementIdをchartformdetailクラスに引き渡し、次にchartformdetailクラスから、elementIdを知って、そのラベルに正しいテキストを表示する必要があります。私はこれにどうしたらいいですか?これらすべての基本的な質問を申し訳ありません、私はまだ学んでいます。あなたの忍耐と指導に感謝します! – Winona

関連する問題