开发者

error: address of overloaded function with no contextual type information

开发者 https://www.devze.com 2023-03-29 01:18 出处:网络
Code: class que { public: que operator++(int) {}// 1 que &operator++() {} que &operator+=(int n) {

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.2


error: 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.

0

精彩评论

暂无评论...
验证码 换一张
取 消

关注公众号