2011-05-05 3 views
4

я перегрузить оператор(), следующим образом:В чем проблема следующего кода?

#include <iostream> 
using namespace std; 

class Test { 

    public: 
    Test() {}; 
    void operator() (Test); 

}; 

void Test::operator() (Test test) { 
    cout << "yes"; 
} 

int main() { 
    Test test; 
    (test); 
} 

, когда я запускаю его, «да» не появляется? возникнут проблемы с кодом выше?

ответ

4

С этой подписи для operator() вам нужно будет назвать это что-то вроде:

test(test); 

или, возможно,

test(Test()); 

(test) это просто выражение, которое имеет тип Test, что ничего не делает ,

6

Это должно быть что-то вроде

test(test); 

так, что operator() вызывается. Когда вы просто кладете фигурные скобки вокруг имени переменной, которое не вызывает operator() - обе фигурные скобки должны следовать за именем переменной.

+0

аннулируются оператор() (Test); параметр is() (Test), поэтому мы не должны передавать его как (тест)? –

+0

'Test :: operator()' принимает значение параметра «Тест» по значению. –

+0

На самом деле это должно быть что-то вроде: 'test (test);' (call member function 'operator()' on 'test', передавая (другой)' test' в качестве аргумента. –

0

Run it like test(). Это оператор функции, перегруженный.

0

Вы должны использовать test(); не (test). То есть после того, как вы измените подпись, чтобы удалить неиспользуемый аргумент ... изменения в void operator()();

Посмотрите на википедии: http://en.wikipedia.org/wiki/Function_object

Смежные вопросы