Ошибка множественного определения, включая заголовочный файл c ++ со встроенным кодом из нескольких источников
Внутри тела класс считается cxx встроенным компилятором. Если c++ вы реализуете вне тела, но cpp все еще в заголовке, вы должны c++ явно пометить метод как «встроенный».
namespace test_ns{
class TestClass{
public:
inline void testMethod();
};
void TestClass::testMethod(){
// some code here...
}
} // end namespace test_ns
Изменить
Мне cpp часто помогает решить подобные cxx проблемы компиляции, понимая, что c++ компилятор не видит ничего c++ похожего на файл заголовка. Заголовочные cxx файлы предварительно обрабатываются, и cpp компилятор просто видит один c++ огромный файл, содержащий c++ каждую строку из каждого cpp (рекурсивно) включенного cxx файла. Обычно отправной точкой cpp для этих рекурсивных включений cpp является компилируемый исходный c++ файл cpp. В нашей компании c++ даже скромный на вид файл cpp cpp может быть представлен cxx компилятору как 300000-строчный cpp монстр.
Таким образом, когда cxx метод, который не объявлен c++ встроенным, реализован в cpp файле заголовка, компилятор cpp может десятки раз увидеть c++ void TestClass :: testMethod() {...} в cxx предварительно обработанном cxx файле. Теперь вы можете видеть, что cpp это не имеет смысла, тот cxx же эффект, что и при многократном c++ копировании / вставке в один cpp исходный файл. И даже если cxx вам это удалось, имея его c++ только один раз в каждой cpp единице компиляции, с помощью cxx некоторой формы условной cxx компиляции (например, с использованием cxx скобок включения) компоновщик cxx все равно обнаружит, что cxx символ этого метода находится cpp в нескольких скомпилированных cpp единицах (объектных файлах).
c++
Ошибка множественного определения, включая заголовочный файл c ++ со встроенным кодом из нескольких источников
Мы используем файлы cookies для улучшения работы сайта. Оставаясь на нашем сайте, вы соглашаетесь с условиями использования файлов cookies. Чтобы ознакомиться с нашими Положениями о конфиденциальности и об использовании файлов cookie, нажмите здесь.