Одним из способов решения этой проблемы является использование конечного типа возвращаемого значения.

те рассмотрим функцию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(), Как я могу использовать абсолютное пространство имен в определении функции, когда возвращаемый тип является объектом?

Ответы на вопрос(2)

Ваш ответ на вопрос