Предыстория проблемы:
В ProjectA agent_multi_threading.hpp
включен в agent.h
.
В ProjectB я пытаюсь включить agent.h
в processing_core.h
.
ProjectA написан на C, а ProjectB — на C++.
В приведенном ниже коде показана иерархия включения:
/* File: agent_multi_threading.hpp ProjectA */
#ifdef __cplusplus
#include <atomic>
using namespace std;
#else
/* File: agent.h in ProjectA */
#include "agent_multi_threading.hpp"
/* File: processing_core.h ProjectB */
extern "C" {
#include "agent.h"
}
Сообщение об ошибке:
In file included from /<compiler_path>/gnu/gcc/8.2.0/rhesys/include/c++/8.2.0/atomic:41,
from /<dir_path>/ProjectB/src/agent_multi_threading.hpp:30,
from /<dir_path>/ProjectB/src/agent.h:10,
from /<dir_path>/ProjectA/src/processing_core.cpp:5:
/<compiler_path>/gnu/gcc/8.2.0/rhesys/include/c++/8.2.0/bits/atomic_base.h:109:3: error: template with C linkage
template<typename _Tp>
^~~~~~~~
/<dir_path>/ProjectA/src/processing_core.cpp:5:1: note: 'extern "C"' linkage started here
extern "C" {
^~~~~~~~~~
from /<dir_path>/ProjectB/src/agent_multi_threading.hpp:30,
from /<dir_path>/ProjectB/src/agent.h:10,
from /<dir_path>/ProjectA/src/processing_core.cpp:5:
/<compiler_path>/gnu/gcc/8.2.0/rhesys/include/c++/8.2.0/atomic:62:3: error: template specialization with C linkage
template<>
^~~~~~~~
Q1. Каковы значения шаблона со связью C и специализации шаблона со связью C?
Q2. Почему это происходит в моем коде?