2016-11-07 23 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

vectorpairに初期化する一般的な方法は問題ありませんが、問題はstd::ifstreamがコピーコンストラクタブルではないということです。したがって、あなたは

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

を使用することはできませんしかし、あなたはpairstd::ifstream*を使用することができるはずです。

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

fstreamsは、コピー構成可能されていないため、エラーがあります。

ifstreamsをペアのベクトルに移動することをお勧めします。より明瞭で制御しやすい。

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)) 
    }; 
関連する問題