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

时间:2011-08-19 11:57:33

标签: 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;
}

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

1 个答案:

答案 0 :(得分:6)

  

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

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

n > 0 ? (que& (que::*)())&que::operator++ : 0

您必须考虑上述子表达式与封闭的完整表达式(go的赋值)无关。所以它必须是正确的,即它不能使用go的类型来选择正确的重载,因为它不是这个特定子表达式的一部分。