2011-05-11 39 views
0

時在文件A.hpp,我有「不匹配調用」 編譯器錯誤使用boost ::信號

extern boost::signal<void (model::Bullet&, Point&, Point&, int)> signal_createBullet; 

等文件A.cpp,我有

boost::signal<void (model::Bullet&, Point&, Point&, int)> signal_createBullet; 

在文件B.hpp,我有一個類Entities具有靜態成員函數receiveSignalCreateBullet,我想與signal_createBullet連接,像這樣:(命名空間不再贅述)

class Entities 
{ 
    Entities() 
    { 
     signal_createBullet.connect(&receiveSignalCreateBullet); 
    } 

    public: 
     static void receiveSignalCreateBullet(const Bullet&, const Point&, const Point&, const int); 
}; 

inline static void receiveSignalCreateBullet(...) { ... } 

終於在文件C.cpp,我使用signal_createBullet這樣的:

signal_createBullet(bullet, pos, bulletVector, count); 

甲乙編譯成功(使用克++),但是C失敗,此錯誤消息:

In member function ‘virtual void thrl::model::SingleStream::shoot(const thrl::utl::Point&, const thrl::utl::Point&, const thrl::utl::Point&) const’: 
src/Shot.cpp:25: error: no match for call to ‘(boost::signal4<void, thrl::model::Bullet&, thrl::utl::Point&, thrl::utl::Point&, int, boost::last_value<void>, int, std::less<int>, boost::function4<void, thrl::model::Bullet&, thrl::utl::Point&, thrl::utl::Point&, int> >) (const thrl::model::Bullet&, const thrl::utl::Point&, thrl::utl::Point&, int&)’ 
/usr/local/include/boost/signals/signal_template.hpp:330: note: candidates are: typename boost::signal4<R, T1, T2, T3, T4, Combiner, Group, GroupCompare, SlotFunction>::result_type boost::signal4<R, T1, T2, T3, T4, Combiner, Group, GroupCompare, SlotFunction>::operator()(T1, T2, T3, T4) [with R = void, T1 = thrl::model::Bullet&, T2 = thrl::utl::Point&, T3 = thrl::utl::Point&, T4 = int, Combiner = boost::last_value<void>, Group = int, GroupCompare = std::less<int>, SlotFunction = boost::function4<void, thrl::model::Bullet&, thrl::utl::Point&, thrl::utl::Point&, int>] 
/usr/local/include/boost/signals/signal_template.hpp:370: note:     typename boost::signal4<R, T1, T2, T3, T4, Combiner, Group, GroupCompare, SlotFunction>::result_type boost::signal4<R, T1, T2, T3, T4, Combiner, Group, GroupCompare, SlotFunction>::operator()(T1, T2, T3, T4) const [with R = void, T1 = thrl::model::Bullet&, T2 = thrl::utl::Point&, T3 = thrl::utl::Point&, T4 = int, Combiner = boost::last_value<void>, Group = int, GroupCompare = std::less<int>, SlotFunction = boost::function4<void, thrl::model::Bullet&, thrl::utl::Point&, thrl::utl::Point&, int>] 

雖然試圖弄清楚這一點,我格式化我的電話,並在錯誤消息的第一候選人更容易對它們進行比較:

// my call 
‘(
    boost::signal 
    < 
     void 
     (
      thrl::model::Bullet&, 
      thrl::utl::Point&, 
      thrl::utl::Point&, 
      int 
     ), 
     boost::last_value<void>, 
     int, 
     std::less<int>, 
     boost::function 
     < 
      void 
      (
       thrl::model::Bullet&, 
       thrl::utl::Point&, 
       thrl::utl::Point&, 
       int 
      ) 
     > 
    > 
) 
(
    const thrl::model::Bullet&, 
    const thrl::utl::Point&, 
    thrl::utl::Point&, 
    int& 
)’ 

// what g++ expects 
typename boost::signal4<R, T1, T2, T3, T4, Combiner, Group, GroupCompare, SlotFunction>::result_type 
    boost::signal4<R, T1, T2, T3, T4, Combiner, Group, GroupCompare, SlotFunction>::operator()(T1, T2, T3, T4) 
    [ with 
     R = void, 
     T1 = thrl::model::Bullet&, 
     T2 = thrl::utl::Point&, 
     T3 = thrl::utl::Point&, 
     T4 = int, 
     Combiner = boost::last_value<void>, 
     Group = int, 
     GroupCompare = std::less<int>, 
     SlotFunction = boost::function 
     < 
      void 
      (
       thrl::model::Bullet&, 
       thrl::utl::Point&, 
       thrl::utl::Point&, 
       int 
      ) 
     > 
    ] 
// the second candidate is the same as the first, except that it's const 

除了候選人使用'便攜'語法的事實(不,切換我的代碼使用便攜式風格沒有區別)我看到兩個電話之間沒有區別,除了我呼叫的最後一個東西是int&候選人有一個int。我嘗試從信號中去除int參數,看看這是否是問題,而事實並非如此。

任何人都明白爲什麼我會收到此錯誤?

回答

1

靜態無效receiveSignalCreateBullet(常量子彈&,常量點&,常量點&,const int的);

爲什麼這裏的參數是const?在信號聲明中,它們不是常量。

+0

啊!他們最初是const的,雖然我在誇耀我的代碼試圖讓事情發揮作用,但是我讓它們不是const,並且忘記將它們改回來。感謝您爲我偵察明顯。 :) – Max 2011-05-11 22:30:01