Перегрузка функции завершается неудачей при вызове ее в функции-члене с тем же именем [дубликат]

Это не так сложно автоматизировать:

#!/bin/sh
# Usage: fetchall.sh branch ...

set -x
git fetch --all
for branch in "$@"; do
    git checkout "$branch"      || exit 1
    git rebase "origin/$branch" || exit 1
done
2
задан Trevor Hickey 22 October 2015 в 23:04
поделиться

1 ответ

Функция-член скрывает глобальную. Он находит имя в контексте класса, поэтому он не продолжает искать его в других контекстах.

Вам нужно вызвать его так:

::foo(1);

Другое решение - использовать вперед декларации внутри функции, как это:

void Bar::foo()
{
    void foo(int);
    foo(1);
}

Как предлагает Praetorian, вот еще один вариант:

void Bar::foo()
{
    using ::foo;
    foo(1);
}
9
ответ дан Trevor Hickey 21 August 2018 в 01:12
поделиться
  • 1
    Или добавьте using ::foo; в Bar::foo – Praetorian 22 October 2015 в 23:23
  • 2
    В визуальной студии нет права добавлять using без имени класса. он дает следующую ошибку: «foo: символ не может использоваться в члене-декларации». только внутри функции, которую она разрешила, и работает как объявление fw. – SHR 22 October 2015 в 23:26
  • 3
    Какая версия VS? Этот компилируется на VS2015. – Praetorian 22 October 2015 в 23:29
  • 4
    @Praetorian внутри функции работает (точно так же, как объявление вперед), в классе, который он не скомпилировал, я добавлю ваше решение к ответу ... – SHR 22 October 2015 в 23:30
  • 5
    Да, не могу сделать это в классе. В этом случае объявление использования может использоваться только для приведения членов базового класса в область видимости. – Praetorian 22 October 2015 в 23:34
Другие вопросы по тегам:

Похожие вопросы: