Ошибка неопределенного ссылочного компоновщика при реализации функции, объявленной в анонимном пространстве имен - PullRequest
2 голосов
/ 03 мая 2011

При определении сигнатуры функции в анонимном пространстве имен в .hpp, допустимо ли поместить реализацию этой функции в .cpp? Когда я это делаю, я получаю неопределенную ошибку ссылки.

Пример:

//hpp
#ifndef __BAR_HPP_
#define __BAR_HPP_
namespace foo
{
   namespace 
   {
       struct Bar
       {
           void func();
       };
   }
}
#endif

//cpp  
using foo;

void Bar::func()
{
    //...
}

1 Ответ

5 голосов
/ 03 мая 2011

Подумайте об этом:

namespace foo
{
    struct Bar
    {
        void func();
    };
}
void Bar::func() { /*impl...*/ }

Ваш код не работает по той же причине, по которой этот код не работает - определение предоставлено в неверной области. Что нужно это:

void foo::Bar::func() { /*impl...*/ }

Но что вы ставите вместо foo:: для обозначения имени анонимного пространства имен? У него его нет.

Итог: невозможно объявить что-либо внутри анонимного пространства имен, а затем определить это в другом месте, так как не существует механизма для определения правильной области.

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