пространство имен то же имя, что и функция - PullRequest
3 голосов
/ 13 июля 2010

У меня есть это в заголовке:

double commonFunction( ... )
{ /*...*/ }
namespace F2
{
    double impactFactor( ... )
    { /*...*/ }
    double func( ... )
    { /*...*/ }
    double F2( ... )
    { /*...*/ }
}
namespace FL
{
    double impactFactor( ... )
    { /*...*/ }
    double func( ... )
    { /*...*/ }
    double FL( ... )
    { /*...*/ }
}

И я хотел бы получить доступ к функциям F2 и FL из глобального пространства имен.Я попытался добавить это в конец заголовка (или после включения, не имеет значения):

using F2::F2;
using FL::FL;

Я уверен, что это работает, когда имена функций отличаются от имен пространства имен, но почемуэто не работает, и как я могу это исправить?Спасибо

PS: я не могу поместить функции за пределы их пространства имен, потому что это приведет к переопределению символа (F2 и FL, как пространства имен, так и функции).

ОБНОВЛЕНИЕ: для тех, кто проклинает меня, вот что я сделал.Поскольку это научный заголовок формулы, и трудно найти хорошее короткое имя пространства имен, я назвал пространства имен F2 и FL и сами функции f2 и fL.

Ответы [ 2 ]

6 голосов
/ 13 июля 2010

Поскольку using переносит каждое объявление с заданным именем в область, поэтому, если у вас уже есть два или более объявлений с одним именем (в данном случае namespace f1), он будет жаловаться.

И это не имеет ничего общего с тем, что имя пространства имен и функции совпадают. Даже это вызовет ту же ошибку:

namespace foo
{
    void not_foo(){};
}
namespace not_foo
{
    void foo(){}
}
using not_foo::foo;
1 голос
/ 13 июля 2010

Ваш вопрос «как получить доступ к функциям F2 и FL из глобального пространства имен».

Это немного неоднозначно, поскольку его можно интерпретировать как «как получить доступ к функциям F2 и FL, которые определены в глобальном пространстве имен».Но из кода, я думаю, вы имели в виду «как получить доступ к функциям :: F2 :: F2 и :: FL :: FL из кода в глобальном пространстве имен»

Мне интересно, с какой ошибкой вы сталкиваетесь.Кроме того, каковы фактические аргументы?Без этого я могу только догадываться.Я бы предложил изменить объявление using на using ::FL::FL.Тем не менее, поиск имени FL в глобальном пространстве имен найдет namespace FL, вы не можете это скрыть.

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