Одним из способов решения этой проблемы является использование конечного типа возвращаемого значения.
те рассмотрим функциюbar
объявлено в пространстве именfoo
который возвращаетstd::vector< float >
(но также работает с другими объектами).
// header.h
#include <vector>
namespace foo
{
::std::vector< float > bar();
}
Компиляция его определения с использованием относительного пространства имен работает.
#include "header.h"
::std::vector< float > foo::bar()
{
}
Однако компиляция его определения с использованием абсолютного пространства имен не работает.
#include "header.h"
::std::vector< float > ::foo::bar()
{
}
Ошибка возврата из GCC
function.cpp:3:26: error: ‘foo’ in ‘class std::vector<float>’ does not name a type
::std::vector< float > ::foo::bar()
Оказывается, пробелы разрешены в пространстве имен, поэтому::std::vector< float > ::foo::bar()
эквивалентно::std::vector< float >::foo::bar()
, Как я могу использовать абсолютное пространство имен в определении функции, когда возвращаемый тип является объектом?