首先,是的,我被困在使用 Visual Studio 2008 中,我相信这个错误是 Visual Studio 2008 特有的。
我正在尝试编写一个仿函数来比较我的结构的一个成员,这样我就可以upper_bound
对vector
按该成员排序的所述结构进行操作。这很难用语言来解释,所以这里有一个例子:
struct Foo {
int a;
char b;
};
struct comp : binary_function<const double, const Foo&, bool> {
bool operator () (const double lhs, const Foo& rhs) { return lhs < rhs.a; }
};
int main() {
vector<Foo> test;
for(int i = 0; i < 5; ++i) {
Foo foo = { i + 1, 'a' + i };
test.push_back(foo);
}
cout << upper_bound(test.begin(), test.end(), 2, comp())->b << endl;
}
这在Visual Studio 2015上运行良好。但是 Visual Studio 2008 给了我错误:
错误 C2664:“bool comp::operator ()(const double,const Foo &)”:无法将参数 1 从“Foo”转换为“const double”
我怀疑在通过交换输入来测试函子的严格弱排序的实现中存在一些邪恶。是否有一种解决方法可以暂停对编译器的检查,或者我只需将我的仿函数更改为接收 2 Foo
s 并Foo
在此处临时代表 2 ?