2016-11-07 1 views
0

Ich möchte einen Vektor von Paaren mit einigen hartcodierten Werten initialisieren, ich versuchte, verschiedene Lösungen zu verwenden, aber ich erhalte immer Kompilierungsfehler. Mein Code sieht wie folgt aus:C++ Vektor der Paarinitialisierung - Kompilierungsfehler

std::vector<std::pair<cv::HOGDescriptor, std::ifstream> > hogs_files = { 
    std::make_pair(hog, file), 
    std::make_pair(hog2, file2), 
    std::make_pair(hog3, file3), 
    std::make_pair(hog4, file4), 
    std::make_pair(hog5, file5), 
    std::make_pair(hog6, file6), 
    std::make_pair(hog7, file7), 
    std::make_pair(hog8, file8) 
}; 

und die Fehler, die ich habe ist:

Error C2440 '<function-style-cast>': cannot convert from 'initializer list' to '_Mypair' 

Vielen Dank für Antworten.

+3

Bitte entfernen Sie das '='. –

+0

Es hilft nicht – mcjay

+0

welcher Compiler? – Arunmu

Antwort

1

Der allgemeine Ansatz zur Initialisierung der vector von pair s ist in Ordnung, aber das Problem ist, dass std::ifstream ist nicht kopierbar. Daher werden Sie nicht in der Lage sein, jedoch verwenden

std::vector<std::pair<cv::HOGDescriptor, std::ifstream> > hogs_files = { 
    std::make_pair(hog, file), 
    ... 
}; 

, sollten Sie in der Lage sein std::ifstream* im pair zu verwenden:

std::vector<std::pair<cv::HOGDescriptor, std::ifstream*> > hogs_files = { 
    std::make_pair(hog, &file), 
    ... 
}; 
1

Der Fehler ist, weil fstreams nicht kopier konstruierbar.

Ich würde vorschlagen, Sie bewegen Ihre ifstreams auf den Vektor der Paare; mehr Klarheit und Kontrolle.

std::vector<std::pair<cv::HOGDescriptor, std::ifstream> > hogs_files = { 
     std::make_pair(hog, std::move(file)), 
     std::make_pair(hog2, std::move(file2)), 
     std::make_pair(hog3, std::move(file3)), 
     std::make_pair(hog4, std::move(file4)), 
     std::make_pair(hog5, std::move(file5)), 
     std::make_pair(hog6, std::move(file6)), 
     std::make_pair(hog7, std::move(file7)), 
     std::make_pair(hog8, std::move(file8)) 
    };