2016-11-07 65 views
0

我想用一些硬编码值初始化一个向量对,我尝试过使用不同的解决方案,但是我一直收到编译错误。我的代码如下所示:C++向量对初始化 - 编译错误

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) 
}; 

,我已经得到了错误的是:

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

感谢您的答案。

+3

请删除'='。 –

+0

它没有帮助 – mcjay

+0

哪个编译器? – Arunmu

回答

1

初始化pairvector的一般方法是好的,但问题是std::ifstream不是可复制构造的。因此,您将无法使用

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

但是,你应该能够在pair使用std::ifstream*

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

这个错误是因为fstreams没有拷贝构造。

我建议你将ifstream移动到成对的向量中;更清晰和控制。

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)) 
    };