错误1error C2678: 二进制“!=”: 没有找到接受“std::ifstream”类型的左操作数的运算符(或没有可接受的转换)d:\documents\visual studio 2013\

【原代码】
string bow_path = string(DATA_FOLDER) + string(“bow.txt”);
std::ifstream read_file(bow_path);
if (read_file!=0)
{
cout << “BOW 已经准备好…” << endl;
}
else{
// 对于每一幅模板,提取SURF算子,存入到vocab_descriptors中
multimap ::iterator i = train_set.begin();
for (; i != train_set.end(); i++)
{
vectorkp;
string cate_nam = (*i).first;
Mat tem_image = (*i).second;
Mat imageDescriptor;
featureDecter->detect(tem_image, kp);
bowDescriptorExtractor->compute(tem_image, kp, imageDescriptor);
//push_back(Mat); 在原来的Mat的最后一行后再加几行,元素为Mat时, 其类型和列的数目 必须和矩阵容器是相同的
allsamples_bow[cate_nam].push_back(imageDescriptor);
}
//简单输出一个文本,为后面判断做准备
std::ofstream ous(bow_path); //wei
ous << “flag”;
cout << “bag of words构造完毕…” << endl;
}
【错误1error C2678: 二进制“!=”: 没有找到接受“std::ifstream”类型的左操作数的运算符(或没有可接受的转换)d:\documents\visual studio 2013\】【read_file!=0代码出现2678错误】
改为!read_file然后将if else {}的代码互换即可

【改后代码】
string bow_path = string(DATA_FOLDER) + string(“bow.txt”);
std::ifstream read_file(bow_path);
if (!read_file)
{
// 对于每一幅模板,提取SURF算子,存入到vocab_descriptors中
multimap ::iterator i = train_set.begin();
for (; i != train_set.end(); i++)
{
vectorkp;
string cate_nam = (*i).first;
Mat tem_image = (*i).second;
Mat imageDescriptor;
featureDecter->detect(tem_image, kp);
bowDescriptorExtractor->compute(tem_image, kp, imageDescriptor);
//push_back(Mat); 在原来的Mat的最后一行后再加几行,元素为Mat时, 其类型和列的数目 必须和矩阵容器是相同的
allsamples_bow[cate_nam].push_back(imageDescriptor);
}
//简单输出一个文本,为后面判断做准备
std::ofstream ous(bow_path); //wei
ous << “flag”;
cout << “bag of words构造完毕…” << endl;
}
else{
cout << “BOW 已经准备好…” << endl;
}

    推荐阅读