错误:没有上下文类型信息的重载函数的地址

all*_*all 2 c++ operator-overloading

码:

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;
}
Run Code Online (Sandbox Code Playgroud)

我想用第3行替换第2行("if:"语句为"?:").
如果我取消注释3,编译器会给我一个错误.
如果我删除第1行,则第3行有效.
问题是:编译器对我有什么要求?
错误:错误:没有上下文类型信息的重载函数的地址
编译器:gcc-4.5.2

Luc*_*ton 6

错误:没有上下文类型信息的重载函数的地址

名称有两个函数operator++(即消息的'重载函数'位),您需要指定所需的函数(即'上下文类型信息'):

n > 0 ? (que& (que::*)())&que::operator++ : 0
Run Code Online (Sandbox Code Playgroud)

您必须考虑上面的子表达式独立于封闭的完整表达式,赋值为go.因此它必须是正确的,即它不能使用类型go来选择正确的重载,因为它不是这个特定子表达式的一部分.