2012-08-07 101 views
0

我似乎在創建定義爲主題的結構時遇到了一些問題。C++,stl函數向量指針映射

我的目標是創建一種事件處理程序(不管它是好的還是壞的程序設計,或者它不是多線程:目前只是爲了實踐)。

然後我的想法是創建一個指向函數的指針矢量,並將該矢量放置在一個映射中,其中的鍵是一個字符串。

我必須做一些概念性錯誤的,因爲我得到一些奇怪的錯誤: 我的代碼如下(誤差在後):

.h file 
//ptr to function 
typedef int (*pt2Function)(void*); 
typedef std::vector<pt2Function> fPtrVector; 

class eventDispatcher 
{ 

public: 
    //stuff 
    void addListener(std::string,pt2Function); 

protected: 
    //stuff 
    std::map<std::string,fPtrVector> _listeners; 
}; 

,這裏是一個cpp:

.cpp file 

void eventDispatcher::addListener(std::string eventName ,pt2Function function) 
{ 
    std::map<std::string,fPtrVector>::iterator it; 

    it=this->_listeners.find(eventName); 
    if(it != this->_listeners.end()) 
    { 
//do something 
    } 
    else 
    { 
    std::vector<pt2Function> tmp; 
    tmp.insert(function); // here occurs error 1 

    this->_listeners.insert(eventName,tmp); // here occurs error 2 
    std::cout<<"cnt: "<< this->_listeners.count(); 
    } 

}

我得到的錯誤是:

1) no matching function for call to 'std::vector <int (*)(void*), std::allocator<int (*)(void*)> >::insert(int (*&)(void*))' 

2) no matching function for call to 'std::map<std::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::vector<int (*)(void*), std::allocator<int (*)(void*)> >, std::less<std::basic_string<char, std::char_traits<char>, std::allocator<char> > >, std::allocator<std::pair<const std::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::vector<int (*)(void*), std::allocator<int (*)(void*)> > > > >::insert(std::string&, std::vector<int (*)(void*), std::allocator<int (*)(void*)> >&)' 
+0

我覺得很蠢......謝謝大家的回答 – Stormsson 2012-08-07 09:23:33

回答

2

如果檢查insert參考你看到它有兩個參數,一個迭代和值。只需添加一個值,例如push_back

對於地圖,您可以改爲使用_listeners[eventName] = tmp;

1

1)std::vectorinsert()方法通過使用迭代器指定位置來工作。對於你的情況,你可以使用push_back()

2)使用insert(std::make_pair(eventName, tmp))並且將根據地圖創建所需的值類型。

2

沒有變化的std::vector::insert()需要一個參數:全部採用一個迭代器來指示新元素必須先插入的位置。改爲使用std::vector::push_back()添加function

std::map::insert()有一些變化,但您正在嘗試使用一個取map,它被定義爲的value_type

value_type std::pair<const Key, T> 
你的情況

value_typestd::pair<std::string, fPtrVector>

this->_listeners.insert(std::pair(eventName,tmp));