2012-01-19 4 views
1

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

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

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

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

EDIT: Глупая ошибка с моей стороны, это решено.

+4

Какое сообщение об ошибке и какой код вызывает сообщение об ошибке? –

+0

Вы не предоставили достаточную информацию, чтобы иметь возможность ответить на ваш вопрос. Укажите небольшой пример, который показывает, по крайней мере: (1) содержимое ваших файлов заголовков, (2) содержимое ваших .cpp-файлов, (3) вашу командную строку компоновщика. В частности, строки '# include', вероятно, наиболее актуальны. –

ответ

1

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

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

Вот список:

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

  • УБЕДИТЕСЬ только один исходный файл определяет функцию

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

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

0

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

+2

На самом деле, вы можете иметь реализации в заголовочных файлах, если методы встроены или используются шаблоны (в этом случае это необходимо). –

+0

Вы правы, извините, я просто пытался подчеркнуть, что это не вопрос стиля или хороших стандартов. В любом случае, это необходимо (даже в случае шаблонных функций, хотя вы можете жить с предупреждающими сообщениями в случае встроенных строк) – enobayram

Смежные вопросы