РЕШЕНО: Я полный тупик. После тщательной проверки всех файлов и отслеживания с помощью нашего собственного генератора файлов зависимостей выясняется, что на самом деле имелись несанкционированные включения .cpp, которые недавно были добавлены в файловую систему, и это стало причиной проблемы. Извините, и спасибо всем за помощь всем! XD
У меня неприятная проблема с неясной ошибкой, с которой я надеялся, что кто-то может помочь. По сути, я объявляю универсальный класс в заголовочном файле следующим образом:
//foo.h
#pragma once
class foo
{
public:
foo();
~foo();
void random_function();
};
Обратите внимание, что я объявил прагму один раз, чтобы предотвратить несколько определений, и все прототипы функций помещаются в определение класса. Соответствующий класс определяется так:
// foo.cpp
#include "foo.h"
foo::foo() {
}
foo::~foo(){
}
void foo::random_function(){
//do stuff
}
Этот класс используется во многих других файлах. Например:
// bar.h
#include “foo.h”
class bar
{
bar();
~bar();
std::shared_ptr<foo> get_foo();
std::shared_ptr<foo> my_foo;
};
Но когда я компилирую, я получаю следующую ошибку для каждого члена функции определения класса:
bar.o: In function `foo:foo()':
dir/foo.cpp:80: multiple definition of `foo::foo()'
blah.o:dir/foo.cpp:80: first defined here
bar.o: In function `foo:foo()':
dir/foo.cpp:80: multiple definition of `foo::foo()'
blah.o:dir/foo.cpp:80: first defined here
Обратите внимание, как кажется, что одна и та же ошибка в 3 строки повторяется дважды подряд. Этот же шаблон ошибки повторяется для каждого объявления конструктора / деструктора / функции. Также обратите внимание, как кажется, что функция foo () в foo.cpp сначала определяется в foo.cpp, что, кажется, не имеет особого смысла. Но я только заметил, что это начинается с bar.o, а затем говорит blah.o …?
На самом деле, почесывая голову, не могу понять, откуда возникла проблема или куда я должен посмотреть. Любая помощь будет принята с благодарностью! : D
Дополнения:
Попробуйте добавить в foo.h
#ifndef FOO_H
#define FOO_H
//foo class and stuff
#endif
Других решений пока нет …