M
Marcin Gil
Hi!
I have the code like this
(obvious things like ctor/dtor removed)
typedef struct _NODE
{
int val;
int index;
} Node;
struct A:
{
std::vector<Node*> Nodes;
bool EqIndex(const Node* ptr, int idx) const
{ return ptr->index == idx; };
int foo();
}
I would like to write like this:
int A::foo()
{
...
std::find_if(Nodes.begin(), Nodes.end(), bind2nd(&A:EqIndex, 5));
...
}
but got these errors:
1>c:\program files\microsoft visual studio 8\vc\include\functional(303)
: error C2825: '_Fn2': must be a class or namespace when followed by '::'
1> main.cpp(361) : see reference to class template instantiation
'std::binder2nd<_Fn2>' being compiled
1> with
1> [
1> _Fn2=bool (__thiscall A::* )(const Node*,unsigned long)
1> ]
1>c:\program files\microsoft visual studio 8\vc\include\functional(303)
: error C2039: 'first_argument_type' : is not a member of '`global
namespace''
1>c:\program files\microsoft visual studio 8\vc\include\functional(303)
: error C2146: syntax error : missing ',' before identifier
'first_argument_type'
1>c:\program files\microsoft visual studio 8\vc\include\functional(303)
: error C2065: 'first_argument_type' : undeclared identifier
1>c:\program files\microsoft visual studio 8\vc\include\functional(304)
: error C2825: '_Fn2': must be a class or namespace when followed by '::'
1>c:\program files\microsoft visual studio 8\vc\include\functional(304)
: error C2039: 'result_type' : is not a member of '`global namespace''
1>c:\program files\microsoft visual studio 8\vc\include\functional(304)
: error C2146: syntax error : missing ',' before identifier 'result_type'
1>c:\program files\microsoft visual studio 8\vc\include\functional(304)
: error C2065: 'result_type' : undeclared identifier
1>c:\program files\microsoft visual studio 8\vc\include\functional(305)
: error C2955: 'std::unary_function' : use of class template requires
template argument list
1> c:\program files\microsoft visual studio
8\vc\include\functional(21) : see declaration of 'std::unary_function'
1>c:\program files\microsoft visual studio 8\vc\include\functional(307)
: error C2825: '_Fn2': must be a class or namespace when followed by '::'
1>c:\program files\microsoft visual studio 8\vc\include\functional(307)
: error C2143: syntax error : missing ',' before '`global
namespace'::first_argument_type'
1>c:\program files\microsoft visual studio 8\vc\include\functional(308)
: error C2825: '_Fn2': must be a class or namespace when followed by '::'
1>c:\program files\microsoft visual studio 8\vc\include\functional(308)
: error C2143: syntax error : missing ',' before '`global
namespace'::result_type'
1>c:\program files\microsoft visual studio 8\vc\include\functional(309)
: error C2955: 'std::unary_function' : use of class template requires
template argument list
1> c:\program files\microsoft visual studio
8\vc\include\functional(21) : see declaration of 'std::unary_function'
1>c:\program files\microsoft visual studio 8\vc\include\functional(310)
: error C2955: 'std::unary_function' : use of class template requires
template argument list
1> c:\program files\microsoft visual studio
8\vc\include\functional(21) : see declaration of 'std::unary_function'
1>c:\program files\microsoft visual studio 8\vc\include\functional(312)
: error C2825: '_Fn2': must be a class or namespace when followed by '::'
1>c:\program files\microsoft visual studio 8\vc\include\functional(312)
: error C2825: '_Fn2': must be a class or namespace when followed by '::'
1>c:\program files\microsoft visual studio 8\vc\include\functional(312)
: error C2039: 'second_argument_type' : is not a member of '`global
namespace''
1>c:\program files\microsoft visual studio 8\vc\include\functional(312)
: error C2143: syntax error : missing ',' before '&'
1>c:\program files\microsoft visual studio 8\vc\include\functional(330)
: error C2825: '_Fn2': must be a class or namespace when followed by '::'
1>c:\program files\microsoft visual studio 8\vc\include\functional(330)
: error C2039: 'second_argument_type' : is not a member of '`global
namespace''
1>c:\program files\microsoft visual studio 8\vc\include\functional(330)
: error C2146: syntax error : missing ';' before identifier 'value'
1>c:\program files\microsoft visual studio 8\vc\include\functional(330)
: error C4430: missing type specifier - int assumed. Note: C++ does not
support default-int
: error C2664: 'std::find_if' : cannot convert parameter 3 from
'std::binder2nd<_Fn2>' to 'std::binder2nd<_Fn2>'
1> with
1> [
1> _Fn2=bool (__thiscall A::* )(const Node *,unsigned long)
1> ]
1> Cannot copy construct class 'std::binder2nd<_Fn2>' due to
ambiguous copy constructors or no available copy constructor
1> with
1> [
1> _Fn2=bool (__thiscall A::* )(const Node *,unsigned long)
1> ]
What I do wrong?
Using MS Visual Studio 8.
If I write a functor derived from unary_function it works but I'd prefer
using single member function...
Thanks,
-Marcin
I have the code like this
(obvious things like ctor/dtor removed)
typedef struct _NODE
{
int val;
int index;
} Node;
struct A:
{
std::vector<Node*> Nodes;
bool EqIndex(const Node* ptr, int idx) const
{ return ptr->index == idx; };
int foo();
}
I would like to write like this:
int A::foo()
{
...
std::find_if(Nodes.begin(), Nodes.end(), bind2nd(&A:EqIndex, 5));
...
}
but got these errors:
1>c:\program files\microsoft visual studio 8\vc\include\functional(303)
: error C2825: '_Fn2': must be a class or namespace when followed by '::'
1> main.cpp(361) : see reference to class template instantiation
'std::binder2nd<_Fn2>' being compiled
1> with
1> [
1> _Fn2=bool (__thiscall A::* )(const Node*,unsigned long)
1> ]
1>c:\program files\microsoft visual studio 8\vc\include\functional(303)
: error C2039: 'first_argument_type' : is not a member of '`global
namespace''
1>c:\program files\microsoft visual studio 8\vc\include\functional(303)
: error C2146: syntax error : missing ',' before identifier
'first_argument_type'
1>c:\program files\microsoft visual studio 8\vc\include\functional(303)
: error C2065: 'first_argument_type' : undeclared identifier
1>c:\program files\microsoft visual studio 8\vc\include\functional(304)
: error C2825: '_Fn2': must be a class or namespace when followed by '::'
1>c:\program files\microsoft visual studio 8\vc\include\functional(304)
: error C2039: 'result_type' : is not a member of '`global namespace''
1>c:\program files\microsoft visual studio 8\vc\include\functional(304)
: error C2146: syntax error : missing ',' before identifier 'result_type'
1>c:\program files\microsoft visual studio 8\vc\include\functional(304)
: error C2065: 'result_type' : undeclared identifier
1>c:\program files\microsoft visual studio 8\vc\include\functional(305)
: error C2955: 'std::unary_function' : use of class template requires
template argument list
1> c:\program files\microsoft visual studio
8\vc\include\functional(21) : see declaration of 'std::unary_function'
1>c:\program files\microsoft visual studio 8\vc\include\functional(307)
: error C2825: '_Fn2': must be a class or namespace when followed by '::'
1>c:\program files\microsoft visual studio 8\vc\include\functional(307)
: error C2143: syntax error : missing ',' before '`global
namespace'::first_argument_type'
1>c:\program files\microsoft visual studio 8\vc\include\functional(308)
: error C2825: '_Fn2': must be a class or namespace when followed by '::'
1>c:\program files\microsoft visual studio 8\vc\include\functional(308)
: error C2143: syntax error : missing ',' before '`global
namespace'::result_type'
1>c:\program files\microsoft visual studio 8\vc\include\functional(309)
: error C2955: 'std::unary_function' : use of class template requires
template argument list
1> c:\program files\microsoft visual studio
8\vc\include\functional(21) : see declaration of 'std::unary_function'
1>c:\program files\microsoft visual studio 8\vc\include\functional(310)
: error C2955: 'std::unary_function' : use of class template requires
template argument list
1> c:\program files\microsoft visual studio
8\vc\include\functional(21) : see declaration of 'std::unary_function'
1>c:\program files\microsoft visual studio 8\vc\include\functional(312)
: error C2825: '_Fn2': must be a class or namespace when followed by '::'
1>c:\program files\microsoft visual studio 8\vc\include\functional(312)
: error C2825: '_Fn2': must be a class or namespace when followed by '::'
1>c:\program files\microsoft visual studio 8\vc\include\functional(312)
: error C2039: 'second_argument_type' : is not a member of '`global
namespace''
1>c:\program files\microsoft visual studio 8\vc\include\functional(312)
: error C2143: syntax error : missing ',' before '&'
1>c:\program files\microsoft visual studio 8\vc\include\functional(330)
: error C2825: '_Fn2': must be a class or namespace when followed by '::'
1>c:\program files\microsoft visual studio 8\vc\include\functional(330)
: error C2039: 'second_argument_type' : is not a member of '`global
namespace''
1>c:\program files\microsoft visual studio 8\vc\include\functional(330)
: error C2146: syntax error : missing ';' before identifier 'value'
1>c:\program files\microsoft visual studio 8\vc\include\functional(330)
: error C4430: missing type specifier - int assumed. Note: C++ does not
support default-int
: error C2664: 'std::find_if' : cannot convert parameter 3 from
'std::binder2nd<_Fn2>' to 'std::binder2nd<_Fn2>'
1> with
1> [
1> _Fn2=bool (__thiscall A::* )(const Node *,unsigned long)
1> ]
1> Cannot copy construct class 'std::binder2nd<_Fn2>' due to
ambiguous copy constructors or no available copy constructor
1> with
1> [
1> _Fn2=bool (__thiscall A::* )(const Node *,unsigned long)
1> ]
What I do wrong?
Using MS Visual Studio 8.
If I write a functor derived from unary_function it works but I'd prefer
using single member function...
Thanks,
-Marcin