У меня есть что-то вроде этого в моем коде:Странные Несколько Определения ошибок
namespace A {
namespace B {
void
GetLine(std::istream& stream, std::string& line)
{
line.clear();
while (stream.good()) {
std::getline(stream, line);
boost::trim(line);
if (not line.empty()) break;
}
boost::to_upper(line);
}
}
}
И я получаю ошибку несколько определений всякий раз, когда я называю A::B::GetLine
. Любые идеи, почему?
(Код работает, поэтому я постараюсь дать конкретные фрагменты, если вам нужна дополнительная информация, но я не могу просто поместить весь код здесь).
Не можете ли вы опубликовать сообщение об ошибке компилятора? Возможно, это намекает нам на что-то другое, чего нет в приведенном выше фрагменте. – David
Вы пытаетесь связать в объектном файле несколько раз? Взгляните на свой файл makefile, чтобы узнать, передается ли .o, содержащее эту функцию, в компилятор несколько раз. Я предполагаю, что вы используете Unix или Unix-подобную систему, но еще одна вещь, которую вы можете сделать, - запустить «nm --demangle» во всех ваших объектных файлах и выполнить поиск A :: B :: GetLine, чтобы увидеть, отображается как «определенное» в нескольких файлах .o. – George
+1 для nm --demangle – Chubsdad