2015-06-30 3 views
0

У меня есть заголовочный файл с классом и несколько функций членов декларации и не статической, как это:Функции Pointer Проблема C++/Arduino

//foo.h 
    ... 
    #include <bar.h> 

    class foo 
    { 
     ... 
     public: 
      void myFunction(); 
    }; 

и заголовочным файлом с структурой и классом, как:

//bar.h 
    ... 
    struct baz 
    { 
     class foo; 
     ... 
     void (foo::*functionPointer)() = NULL; 
    } 

    class bar 
    { 
     ... 
     public: 
      static myOtherFunction(); 
    }; 

и я хочу обратиться указатель на функцию в статической функции "myOtherFunction" bar.cpp как:

void bar::myOtherFunction() 
    { 
     ... 
     baz b = baz(); 
     b.functionPointer = &foo::myFunction; 
    } 

, но это заставляет меня ошибка компилятора:

bar.cpp:247:22: error: cannot convert 'void (foo::*)()' to 'void baz::foo::*)()' in assignment 
      b.functionPointer = &foo*:myFunction; 
    Error compiling 

Довольно уверен, что это явная вина для тех, кто испытал на C/C++, но сейчас я застрял и был бы очень благодарен, о какой-то помощи. Спасибо ...

+1

Вы пересылаете 'foo' * внутри * определение' baz'? – molbdnilo

+0

Iow, как 'bar.h' знает' class foo' даже существует? Ваши опубликованные образцы полны несвязанных ошибок, поэтому ** настоящий ** код, который показывает ** настоящую ** проблему, несомненно, поможет. – WhozCraig

+0

да я сделал объявление вперед (только что отредактировал) – tobilocker

ответ

0

Если у вас есть доступ к библиотекам/классам C++ 11 в вашем компиляторе, включите библиотеку functional. Описание here. Он покажет способ создания полностью «упакованных» объектов, которые имеют ссылку как на метод, который вы хотите, так и на экземпляр класса.

Если нет, прочитайте раздел Pointers to Members раздела C++ FAQ очень ОЧЕНЬ внимательно. Все это поддерживается всем, что является основной частью языка.

Удачи.

Смежные вопросы