2016-10-12 9 views
4

std :: vector의 std :: make_pair 호출에 대한 올바른 구문을 조언 할 수있는 사람은 누구입니까? : 아래 코드에서와 push_back 전화 : 컴파일러 (MS VS2015.2)이 이해할 수있는 표준 : make_pair 호출에서 두 번째 인수의 유형을 판별 할 수 없습니다초기화 std :: pair <double, std :: array <std :: pair <double, double>, 3>>

#include <array> 
#include <vector> 
#include <utility> 

int main() 
{ 
    typedef std::pair<double, double> PairType; 
    std::vector<std::pair<double, std::array<PairType, 3> > > myVector; 

    double Key = 0.0; 
    PairType Pair1 = std::make_pair(1.0, 2.0); 
    PairType Pair2 = std::make_pair(3.0, 4.0); 
    PairType Pair3 = std::make_pair(5.0, 6.0); 

    myVector.push_back(std::make_pair(Key, { Pair1, Pair2, Pair3 })); // Syntax Error 

    return 0; 
} 

아직 나는 방법을 모른다 그것을 계몽하십시오.

+0

가능한 중복 왜하지 않습니다 내 템플릿 이니셜 라이저 목록을 수락] (http://stackoverflow.com/questions/4757614/why-doesnt-my-template-accept-a n-initializer-list) – LogicStuff

+2

make_pair : myVector.push_back ({Key, {Pair1, Pair2, Pair3}}); ' –

답변

3

컴파일러는 { Pair1, Pair2, Pair3 }이 3 쌍의 std::array이라는 것을 알 수 없습니다. 명시 적으로 유형을 지정하면 작동합니다 :

myVector.push_back(std::make_pair(Key, std::array<PairType,3>{ Pair1, Pair2, Pair3 })); 

Demo.

+0

그게, 많은 감사합니다. – pugdogfan

3

컴파일러가 Library fundamentals v2 지원하는 경우는, std::experimental::make_array을 사용할 수

using std::experimental::make_array; 
myVector.push_back(std::make_pair(Key, make_array(Pair1, Pair2, Pair3))); 

LIVE from GCC

[의
+1

아니면 그냥'make_array'라고 쓰십시오. – Yakk

+1

@Yakk'using std :: experimental :: make_array;'? 확실한. – songyuanyao

+0

아니요, 구현하지 않은 경우 구현을 작성하십시오. 짧은 기능입니다. – Yakk