3

次のコンストラクターとメンバーを持つ 2 つのテンプレート引数を持つテンプレート クラスがあります。

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

どうすれば修正できますか?ありがとう!

4

2 に答える 2

3

これは最も厄介な parseです。余分な括弧のセットを入れることで問題を解決できます:

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

左辺値を直接渡した場合、この解析のスコープは存在しないことに注意してください。

IntegerLess x;
MyClass<int, IntegerLess> myClassObject(x);
于 2013-10-31T10:23:36.747 に答える
1

IntegerLessオブジェクトを個別に宣言します。

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

または、juanchopanza が提案したように括弧を追加します。

于 2013-10-31T10:23:55.890 に答える