Я получил три файла в одном проекте
один
namespace sql
{
namespace detail
{
void getColumnValue();
}
}
другой
namespace detail{
.........
}
третий
#include "first_file"namespace sql
{
template<typename TheStruct>
class RowStruct {
public:
void shouldCombine()
{
sql::detail::getColumnValue();
}
}
эти три файла находятся в одних и тех же проектах и в одном внешнем пространстве имен.
но потом я строю, я получил ошибку, чтобы сказать: «sql :: detail ‘не был объявлен
«для третьего файла.
почему я просто не могу сослаться на «детали» в «sql», я что-то пропускаю? Если я использую «detail ::» вместо «sql :: detail ::» в третьем файле, то он пойдет в подробности ::, объявленные во втором файле, что не является тем, что я хочу.
Возможно, «внешнее пространство имен», на которое вы ссылаетесь, является проблемой. Вы должны определить это внешнее пространство имен следующим образом:
// file1
namespace outer {
namespace sql {
namespace detail { ... }
}
}
// file3
#include "file1"
namespace outer {
namespace sql {
namespace detail { ... }
}
}
Если вы положите #include "file1"
внутри namespace outer
в file3 вы получите проблемы, которые видите.
Также обратите внимание, что если вы внутри namespace sql
(где угодно, включая file3), вам не нужно явно говорить sql::detail::
, Просто detail::
достаточно изнутри namespace sql
чтобы дать тебе sql::detail::
, И это независимо от того, namespace detail
определения в других пространствах имен (т. е. ваш файл2 не меняет этого).
Вы должны включить первый файл (я предполагаю, что это заголовочный файл) в третий файл.
#include "sql_detail.h"
namespace sql
{
template<typename TheStruct>
class RowStruct {
public:
void shouldCombine()
{
sql::detail::getColumnValue();
}
};
}
а во втором файле ты не хотел сказать?
namespace sql{
namespace detail{
//..definitions
}}