2014-01-23 2 views
1

현재 쌍 목록을 작성하려고합니다. 내 코드는 다음과 같습니다어떻게 페어 목록을 작성할 수 있습니까?

error C2664: 'void (std::list<_Ty>)' : cannot convert parameter 1 from 'std::pair<_Ty1,_Ty2>' to 'std::list<_Ty>' 

당신은 문제가 정확히를 어디 있는지 감지 도와주세요 수 :

#include <iostream> 
#include <string> 
#include <algorithm> 
#include <iterator> 
#include <list> 
using namespace std; 

list<pair<string,char>> listPair; 
list<pair<string,char>>::iterator it; 
void printStars(list<pair<string,char>> listPair) 
{ 

    for (it=listPair.begin(); it != listPair.end(); it++) 
    cout << it->first <<" "; 
    cout << endl; 
} 
int main() 
{ 
    pair<string,char> mypair; 
    listPair.push_back(make_pair("bib",'a')); 
    listPair.push_back(make_pair("bob",'b')); 
    for_each(listPair.begin(), listPair.end(), printStars); 
    return 0; 
} 

컴파일이 실패?

근무 코드 :

+3

'#include '이 아닙니다. – chris

+2

또는 ''. –

+0

@chris : 오, 고마워. – user3140486

답변

1

귀하의 문제는 그러나 for_each는 각 항목이 아닌 실제 목록을 전달하여 printStars()list 기대, 당신이 std::for_each에 전달하는 펑터가 동의 할 것으로 예상된다

#include <iostream> 
#include <algorithm> 
#include <iterator> 
#include <list> 
#include <string> 
#include <utility> 

list<pair<string,char> > listPair; 
list<pair<string,char> >::iterator it; 
void printStars(const pair<string,char> & listPair){ //notice the &, so it would pass by reference and not make a new copy of the pair. 
    cout << listPair.first << ' '; 

} 
int main() { 
    pair<string,char> mypair; 
    listPair.push_back(make_pair("bib",'a')); 
    listPair.push_back(make_pair("bob",'b')); 
    for_each(listPair.begin(), listPair.end(), printStars); 
    cout << endl; 
    return 0; 
} 
+0

오오 그렇습니다, 그게 바로 제가 고마워요. @OneOfOne – user3140486

2

당신이 std::for_each에 전달하는 범위의 요소. 마지막으로 pair<string,char> 개의 요소가 있으므로 functor의 서명이 void printStars(const pair<string,char>& elem)이어야합니다.

또한 일반 함수를 std::for_each으로 전달하려면 std::ref 또는 (이전 컴파일러에서) std::ptr_fun을 사용해야합니다.

#include <iostream> 
#include <algorithm> 
#include <list> 
#include <string> // missing include 
#include <utility> 
#include <functional> 

using namespace std; 

typedef list< pair<string,char> > list_t; 
list_t listPair; 
void printStars(list_t::reference x) // use a reference, otherwise you create a copy 
{ 
    cout << x.first << " " << x.second << endl; 
} 
int main() 
{ 
    pair<string,char> mypair; 
    listPair.push_back(make_pair("bib",'a')); 
    listPair.push_back(make_pair("bob",'b')); 
    for_each(listPair.begin(), listPair.end(), std::ref(printStars)); // C++11 
    for_each(listPair.begin(), listPair.end(), std::ptr_fun(&printStars)); // C++98 

    return 0; 
} 
관련 문제