Code:
class que {
public:
que operator++(int) {} // 1
que &operator++() {}
que &operator+=(int n) {
que& (que::*go)();
go = 0; if(n > 0) go = &que::operator++ ; // 2
//go = (n > 0) ? (&que::operator++) : 0 ; // 3
}
};
int main() 开发者_开发问答{
que iter;
iter += 3;
return 0;
}
I want to replace line 2 by line 3("if" statement for "?:").
If I uncomment 3, compiler gives me an error. If I delete line 1, then line 3 works. Question is: what does compiler want from me? Error: error: address of overloaded function with no contextual type information Compiler: gcc-4.5.2error: address of overloaded function with no contextual type information
There are two functions with the operator++ name (that's the 'overloaded function' bit of the message), you need to specify which one you want (that's the 'contextual type information' one):
n > 0 ? (que& (que::*)())&que::operator++ : 0
You have to consider that the above subexpression is independent from the enclosing full expression, the assignment to go. So it must be correct on its own, i.e. it can't use the type of go to pick the correct overload because it's not part of this particular subexpression.
加载中,请稍侯......
精彩评论