2013-06-26 29 views
0

我試圖在下面的代碼中將函數指針作爲值存儲在地圖中。 我正在使用solaris sparc服務器。以下是我寫的代碼。將函數指針作爲值存儲在地圖中

#include<iostream> 
#include<sstream> 
#include<map> 

using namespace std; 

typedef int (*spl_handler)(int,string,char *); 
typedef map<string, spl_handler> mo_map; 

int foo(int,char,char *); 
int bar(int,char,char *); 

int foo(int a,string b,char * str) 
{ 
cout <<"i am in foo "<<a<<endl; 
cout <<"i am in foo "<<b<<endl; 
cout <<"i am in foo "<<str<<endl; 
return 0; 
} 

int bar(int a,string b,char * str) 
{ 
cout <<"i am in bar "<<a<<endl; 
cout <<"i am in bar "<<b<<endl; 
cout <<"i am in bar "<<str<<endl; 
return 0; 
} 


int main() 
{ 
mo_map m; 
//m["foo"]=&foo; //compiling works if i write like this . 
m.insert(std::pair<string,spl_handler>(string("foo"),&foo)); //compilation fails here???? 
return 0; 
} 

我收到一個錯誤說:

> CC spl_handler.cc 
"spl_handler.cc", line 34: Error: Could not find a match for std::pair<std::string, int(*)(int,std::string,char*)>::pair(std::string, int(*)(int,char,char*)) needed in main(). 
1 Error(s) detected. 

,但沒有插入的作品直接分配。

有人可以告訴我爲什麼彙編在這裏失敗?

回答

0
int foo(int,char,char *); 
int bar(int,char,char *); 

你錯了第二個參數,應該是string。 此外,最好使用std::make_pair,而不是手動構建配對。

0

可能是您正在拋出編譯器的轉發聲明。這些與實際功能定義不匹配,並且在本示例中不需要:

int foo(int,char,char *); 
int bar(int,char,char *);