С++ «тип использует анонимное пространство имен»C++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 С++ «тип использует анонимное пространство имен»

Сообщение Anonymous »

У меня есть несколько файлов, связанных с этой проблемой, поэтому я постараюсь обобщить как можно больше.
1 - 'traits/logger .h' определяет концепцию, например (коротко):

Код: Выделить всё

namespace tenacitas::lib::traits {

template 
concept logger = requires(t p_t) {
{
p_t.deb(std::declval(),
std::declval() =
std::source_location::current())
} -> std::same_as;
...

};
}
2 — 'log/internal/logger.h' определяет базовый класс для ведения журнала, который соответствует концепции выше, внутри tenacitas: :lib::log::internal.
3 – в 'log/cerr.h` мы имеем:

Код: Выделить всё

namespace tenacitas::lib::log {

using cerr = tenacitas::lib::log::internal::logger std::same_as;
};

template 
requires std::move_constructible && std::copy_constructible
struct circular_queue {
using data = t_data;
using logger = typename t_circular_queue_supplier::logger;
...
private:
logger &m_logger;
...
};

}
5 — В «test/container/circular_queue.h» я написал:

Код: Выделить всё

struct supplier {
using logger = tenacitas::lib::log::cerr;
logger &get_logger() { return m_log; };

private:
logger m_log;
};

bool test(){
supplier _supplier;
container::circular_queue queue(_supplier);
...
}
6 — В main.cpp я вызываю функцию test, указанную выше.
Когда я пытаюсь собрать с помощью gcc (Ubuntu 11.4.0-1ubuntu1~22.04) 11.4.0, я получаю:

Код: Выделить всё

‘supplier’ has a field ‘supplier::m_log’ whose type uses the anonymous namespace [-Werror=subobject-linkage]
а также

Код: Выделить всё

‘tenacitas::lib::container::circular_queue’ has a field ‘tenacitas::lib::container::circular_queue::m_log’ whose type uses the anonymous namespace [-Werror=subobject-linkage]
Я пробовал много всего, но безрезультатно.
Есть идеи?

Подробнее здесь: https://stackoverflow.com/questions/781 ... -namespace
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C++»