成对初始化的 C++ 向量 - 编译错误
C++ vector of pairs initialization - compilation error
我想用一些硬编码值初始化一个对向量,我尝试使用不同的解决方案,但我不断收到编译错误。我的代码如下所示:
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'
感谢您的回答。
初始化 pair
的 vector
的一般方法是可以的,但问题是 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),
...
};
错误是因为 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))
};
我想用一些硬编码值初始化一个对向量,我尝试使用不同的解决方案,但我不断收到编译错误。我的代码如下所示:
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'
感谢您的回答。
初始化 pair
的 vector
的一般方法是可以的,但问题是 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),
...
};
错误是因为 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))
};