我有一个带有两个带有以下构造函数和成员的模板参数的模板类:
template <class T, class TCompare>
class MyClass {
...
public:
MyClass(TCompare compare);
void addElement(T newElement);
...
};
而且我有一个重载operator()以进行整数比较的结构:
struct IntegerLess {
bool operator () {const int& a, const int& b) {
if (a < b)
return true;
return false;
}
};
我创建了一个类'MyClass'的对象并尝试使用它:
MyClass<int, IntegerLess> myClassObject(IntegerLess());
myClassObject.addElement(10);
但是,出现以下编译时错误:
error: request for member ‘addElement’ in ‘myClassObject’, which is of non-class type ‘MyClass<int, IntegerLess>(IntegerLess (*)())’
我该如何纠正?谢谢!
最佳答案
这是the most vexing parse。您可以通过添加额外的括号来解决问题:
MyClass<int, IntegerLess> myClassObject((IntegerLess()));
// ^ ^
请注意,如果您直接传递了左值,则此解析将没有作用域:
IntegerLess x;
MyClass<int, IntegerLess> myClassObject(x);