2016-08-04 14 views
0

にこの質問を約C++ですが、それはアルドゥイーノとの対話、そして私はソフトウェアの男ませんので、私は他の誰のいくつかのビューを取得するために幸せになります。 私はすでに快適ゾーンから外れていることを知っており、嫌悪者を引き付けるだろうが、もしあなたの人のうちの一人がこれをどうやってやるのかを考えてくれたら、感謝するだろう。そう渡す関数ポインタC++

Arduino main program: 

    //instance 
    Main interpreter; 
    //set delegate 
     interpreter.setDelegate(intepreterDelegate); 
    //delegate function 
     float intepreterDelegate(char *arg){return 3;} 

Mainクラス、その後、別のクラスのインスタンスを作成してSub呼ばれ、そして:Arduino

は、ユーザがクラスのインスタンスを作成し、そのデリゲートメソッドを設定

Sub - > send delegate to Main-> send delegate to Arduino 

Mainクラスは、のサブメッセージからの委任メッセージを正常に取得します。

Main.h 

    //being called from the sub 
    static float fromSubDelegate(char *arg){ 

     // *Here I am trying to push forward this delegate out to the user on arduino 
     Main. b; 
     float result = (b.*b.fpAction)(arg); 
     return result; 


    }; 

    float (Main.::*fpAction)(char*) = 0 ; 
    void setDelegate(float(*fp)(char*)); 

問題は、私は私が私が持っているすべてのデータを提供しているデリゲート

//arduino set this delegate of the main class .cpp 
void Main.::setDelegate(float(*fp)(char*)) 
{ 

    fpAction = fp; // *gives error because fpAction is a member function 

} 

を設定Main.cppにhere-です。 私は、したがって、私は間違ったことをやっているかもしれませんが、C++プログラマはないです、SO 私が助けを

答えて

0

おかげで、私は解決策を見つけた - ちょうどので、機能のために、サブメインから直接ポインタを渡す:

void Main::setDelegate(float(*fp)(char*)) 
{ 
    fpAction=fp; 
    sub->setDelegate(fpAction); 



} 

は素晴らしい作品。再度、感謝します 。

+0

あなたの投稿を答えとしてマークしてください – djUniversal

2

を求めていますこれは、あなたが他の質問で尋ね本当にないです。 adruinoコード の中であなたが(そう思われる)ものと、C++コードで何をしたいかとの間に不一致があります。

あなたはそれが使用するクラスの外のメンバ関数(すなわち、デリゲート)を定義 メンバー関数に非メンバ関数からのデリゲートを変更することはできません。

あなたが現在試みていることは現在意味がありません。あなたのArduinoは、インスタンス

Main interpreter; 

を定義 それは、インタプリタのインスタンス内(OK今のところ)デリゲートを定義し、設定します。

が、fromSubDelegateで()は、新しいインスタンスbを作成します。関数ポインタが静的でない限り、あなたはインタプリタインスタンスに設定されている可能性がどのデリゲート は、Bのインスタンスに設定されませんが、その場合にはあなたも、あなただけの関数を呼び出すことができfromSubDelegate()関数を必要としません直接ポインター。

あなたは物事の仕組みの間違った考えを持っているようです。あなたがクラスの非静的メンバ関数を持っている場合、隠された余分なパラメータがあります。このパラメータは関数内で 'this'として使用できます。 だから

class X 
{ 
    void func(int i); 
} 

として定義メンバ関数は

クラスの外で定義
void func (int i); 

と同じではありません。それは実際にはより無効に似ています

func(X* this, int i); 

意味的には「正しい」、それは構文的にはありませんが。 oreubensの助けに

+0

ありがとうございます、私は新しいインスタンスを作成するとこれが発生すると思われました。あなたは私をたくさん助けました。実際にこのことを実現させる方法を示してください。 (ポインタを直接呼びますか?) – Curnelious

+0

私は混乱して疲れています:(* fpActionが静的であっても、サブのような別のクラスはどのようにそれについて知っていますか? – Curnelious

関連する問題