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

C++ 错误:重载函数的地址没有上下文类型信息,c++,operator-overloading,C++,Operator Overloading,代码: 我想将第2行替换为第3行(“if”statement for“?:”)。 如果我取消注释3,编译器会给我一个错误。 如果删除第1行,则第3行有效。 问题是:编译器想要我做什么? 错误:错误:重载函数的地址,没有上下文类型信息 编译器:gcc-4.5.2 错误:重载函数的地址没有上下文类型信息 有两个函数名为operator++name(即消息中的“重载函数”位),您需要指定所需的函数(即“上下文类型信息”函数): 您必须考虑上面的子表达式与封闭的完全表达式无关,分配给 go 。因此它本身

代码:

我想将第2行替换为第3行(“if”statement for“?:”)。
如果我取消注释3,编译器会给我一个错误。
如果删除第1行,则第3行有效。
问题是:编译器想要我做什么?

错误:错误:重载函数的地址,没有上下文类型信息
编译器:gcc-4.5.2


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

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


您必须考虑上面的子表达式与封闭的完全表达式无关,分配给<代码> go <代码>。因此它本身必须是正确的,即它不能使用

go
的类型来选择正确的重载,因为它不是这个特定子表达式的一部分。

您得到的错误消息是什么?错误:重载函数的地址没有上下文类型信息为什么需要在这里使用函数指针?为什么不反复调用
operator++
?我想它可以从“go”声明中获得这些信息。
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;
}
n > 0 ? (que& (que::*)())&que::operator++ : 0