【发布时间】:2011-08-19 11:57:33
【问题描述】:
代码:
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;
}
我想将第 2 行替换为第 3 行(“?:”的“if”语句)。
如果我取消注释 3,编译器会给我一个错误。
如果我删除第 1 行,则第 3 行有效。
问题是:编译器想从我这里得到什么?
错误:错误:没有上下文类型信息的重载函数地址
编译器:gcc-4.5.2
【问题讨论】:
-
这里为什么需要使用函数指针?为什么不反复拨打
operator++?