ошибка: адрес перегруженной функции без контекстной информации о типе - PullRequest
2 голосов
/ 19 августа 2011

Код:

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

1 Ответ

6 голосов
/ 19 августа 2011

ошибка: адрес перегруженной функции без контекстной информации о типе

Есть две функции с именем operator++ (это бит «перегруженной функции» сообщения), вам нужно указать, какую вы хотите (это «контекстная информация о типе»):

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

Вы должны учитывать, что вышеприведенное подвыражение не зависит от прилагаемого полного выражения, присваивания go. Таким образом, он должен быть правильным сам по себе, то есть он не может использовать тип go, чтобы выбрать правильную перегрузку, потому что он не является частью этого конкретного подвыражения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...