C ++ множественное определение - PullRequest
1 голос
/ 20 января 2012

Итак, у меня есть заголовочный файл, в котором есть реализации функций, а также прототипы.Сейчас я пытаюсь отделить эти реализации от файла и просто оставить прототипы, так как знаю, что не очень хорошие стандарты - иметь реализации в заголовочных файлах.Однако, когда я удаляю реализации из заголовочного файла и помещаю их в свой собственный файл cpp, а затем пытаюсь связать этот файл cpp с остальной частью проекта, он жалуется на множественные определения функций.Спасибо за любую помощь / совет

std::bitset<LENGTH>  foo1(const std::string stringVal);
std::bitset<LENGTH>  foo2(const int decimalVal);
std::string          foo3(const int integerVal);

У меня включена защита включения, поэтому она также не включается более одного раза.

Тогда в cpp у меня просто есть реализации дляэти функции просто прямолинейны.Тем не менее он жалуется на множественные определения функций, если они отделены от заголовочного файла.

РЕДАКТИРОВАТЬ: глупая ошибка с моей стороны, это решено.

Ответы [ 2 ]

1 голос
/ 20 января 2012

Это просто декларация.Даже если в файле нет элементов защиты, эта ошибка не выдастся.

Множественное определение обычно означает, что вы определяете функцию более чем в одном файле реализации.

Вотконтрольный список:

  • убедитесь, что реализация определенно находится за пределами заголовка.

  • убедитесь, что только один исходный файл определяет функцию

  • убедитесь, что вы не включили исходный файл (этот файл тривиален, я надеюсь, вы знаете, что этого не делать)

  • наконец, проверьте, что вызапустить чистую сборку

0 голосов
/ 20 января 2012

Я полагаю, вы не компилируете другой файл cpp, который ранее содержал заголовочный файл.Таким образом, объектный файл все еще содержит определения.Кстати, отсутствие реализаций в заголовочных файлах вовсе не относится к хорошим стандартам.Это необходимо, чтобы вы могли включить один и тот же заголовок в несколько модулей компиляции.

...