请求一个模板类的成员。

3

我有一个模板类,有两个模板参数,具有以下构造函数和成员:

template <class T, class TCompare>
class MyClass {
...
public:
MyClass(TCompare compare);
void addElement(T newElement);
...
};

我有一个结构体,它重载了()运算符用于整数比较:

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 (*)())’

我该怎么修正它?谢谢!

2
看起来像最令人烦恼的解析 - juanchopanza
2个回答

3

这是最令人烦恼的解析问题。您可以通过添加额外的括号来解决此问题:

MyClass<int, IntegerLess> myClassObject((IntegerLess()));
//                                      ^             ^

请注意,如果您直接传递了一个左值,那么这个解析过程就没有任何作用范围:
IntegerLess x;
MyClass<int, IntegerLess> myClassObject(x);

1

IntegerLess 对象分别声明:

IntegerLess comparator;
MyClass<int, IntegerLess> myClassObject(comparator);
myClassObject.addElement(10);

或者,像juanchopanza建议的那样添加括号。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接