Przeładowanie operatora ->*
Ostatnio zmodyfikowano 2018-11-12 09:58
ParseThisCode Temat założony przez niniejszego użytkownika |
Przeładowanie operatora ->* » 2018-11-12 09:32:25 template < class T > class Pointer { T * vptr; public: Pointer() : vptr( new T ) { } Pointer( T & ref ) : vptr( & ref ) { } T & operator ->() { return vptr; } };
class Test { public: void foo() { } };
int main() { Pointer < Test > p; void( Test::* fn )(); fn = & Test::foo; ( p->* fn )(); }
error: no match for 'operator->*' (operand types are 'Pointer<Test>' and 'void (Test::*)()') (p->*fn)(); ~^~~~~
|
|
jankowalski25 |
» 2018-11-12 09:58:46 Komunikat błędu powinien być dość jasny: nie masz nigdzie zdefiniowanego takiego operatora. T & operator ->() { return vptr; } |
1. To nie jest operator ->*() . 2. Brakuje argumentu typu void( Test::* )() . |
|
« 1 » |