2011-09-22 181 views
4

雖然至少有one similar question,但我還是問了我的問題,因爲那個問題沒有解決,似乎也更復雜。我試圖簡化我的。錯誤:函數返回函數

我有一個.cpp文件,使用如下所示的.h,並編譯這些棚錯誤如下。任何想法是讚賞。請注意,代碼被簡化以便最小限度地顯示有問題的部分。

FC_boost_prove.h:

#ifndef FC_H 
#define FC_H 

#include <vector> 
#include "iostream" 

#include "boost/signal.hpp" 
#include "boost/bind.hpp" 
#include <boost/random.hpp> 

typedef boost::signal0<void()> PreUpdateSignal; 
typedef PreUpdateSignal::slot_function_type PreUpdateSlot; 
typedef boost::signal0<void()> PostUpdateSignal; 
typedef PostUpdateSignal::slot_function_type PostUpdateSlot; 

class FC { 
public: 
    FC(uint width, uint height) { 
     std::cout << "In constructor." << std::endl; 
    } 
    ~FC() { 
     //Do ... 
    } 
    void connectPreUpdate(PreUpdateSlot s) { 
     preUpdateSignal_.connect(s); 
    } 
    void connectPostUpdate(PostUpdateSlot s) { 
     postUpdateSignal_.connect(s); 
    } 

protected: 
    PreUpdateSignal preUpdateSignal_; 
    PostUpdateSignal postUpdateSignal_; 
}; 
#endif 

FC_boost_prove.cpp:

#include <iostream> 
#include <string> 
#include "FC_boost_prove.h" 

int main() { 
    std::cout << "test." << std::endl; 
} 

編譯錯誤:

$ g++ FC_boost_prove.cpp 
In file included from /usr/include/boost/signals/signal_template.hpp:22, 
       from /usr/include/boost/signals/signal0.hpp:24, 
       from /usr/include/boost/signal.hpp:19, 
       from FC_boost_prove.h:7, 
       from FC_boost_prove.cpp:3: 
/usr/include/boost/last_value.hpp: In instantiation of ‘boost::last_value<void()>’: 
/usr/include/boost/signals/signal_template.hpp:178: instantiated from ‘boost::signal0<void(), boost::last_value<void()>, int, std::less<int>, boost::function0<void()> >’ 
FC_boost_prove.h:12: instantiated from here 
/usr/include/boost/last_value.hpp:22: error: function returning a function 
In file included from /usr/include/boost/signals/signal0.hpp:24, 
       from /usr/include/boost/signal.hpp:19, 
       from FC_boost_prove.h:7, 
       from FC_boost_prove.cpp:3: 
/usr/include/boost/signals/signal_template.hpp: In instantiation of ‘boost::signal0<void(), boost::last_value<void()>, int, std::less<int>, boost::function0<void()> >’: 
FC_boost_prove.h:12: instantiated from here 
/usr/include/boost/signals/signal_template.hpp:330: error: function returning a function 
/usr/include/boost/signals/signal_template.hpp:370: error: function returning a function 
In file included from /usr/include/boost/function/detail/maybe_include.hpp:13, 
       from /usr/include/boost/function/function0.hpp:11, 
       from /usr/include/boost/signals/signal_template.hpp:38, 
       from /usr/include/boost/signals/signal0.hpp:24, 
       from /usr/include/boost/signal.hpp:19, 
       from FC_boost_prove.h:7, 
       from FC_boost_prove.cpp:3: 
/usr/include/boost/function/function_template.hpp: In instantiation of ‘boost::function0<void()>’: 
FC_boost_prove.h:24: instantiated from here 
/usr/include/boost/function/function_template.hpp:1006: error: function returning a function 
/usr/include/boost/function/function_template.hpp: In instantiation of ‘boost::detail::function::basic_vtable0<void()>’: 
/usr/include/boost/function/function_template.hpp:856: instantiated from ‘void boost::function0<R>::clear() [with R = void()]’ 
/usr/include/boost/function/function_template.hpp:752: instantiated from ‘boost::function0<R>::~function0() [with R = void()]’ 
/usr/include/boost/signals/slot.hpp:105: instantiated from here 
/usr/include/boost/function/function_template.hpp:486: error: function returning a function 
/usr/include/boost/function/function_template.hpp:643: error: function returning a function 

環境:Ubuntu的10.10,克++(Ubuntu的/ Linaro的4.4.4- 14ubuntu5)4.4.5

回答

4

你爲什麼指定boost::signal0<>?信號N模板適用於不能正確解析函數簽名的缺陷編譯器。

要麼使用信號並指定函數簽名,作爲推薦的現代編譯器:

typedef boost::signal<void()> PreUpdateSignal; 
typedef boost::signal<void()> PostUpdateSignal; 

,或者使用信號Ñ並指定返回類型(和每個參數類型)明確地,根據需要爲缺陷的編譯器:

typedef boost::signal0<void> PreUpdateSignal; 
typedef boost::signal0<void> PostUpdateSignal; 
+0

謝謝。我現在已經編譯好了我的代碼。實際上eclipse仍然顯示爲錯誤,所以我不得不使用commanline中的g ++(儘管這是另一個故事)。 – IsaacS