Программа в с+ выдаёт: ошибку обнаружен многократно определенный символ - один или боле

12 года назад от Андрей Батавин

3 Ответы



0 голосов
Проверить список LIB файлов, которые задействованы в компановке (линковании) . Например, добавили две библиотеки в которых определена одна и та же функция. Линкер в растерянности, какую функцию брать.
12 года назад от Дмитрий Серебренников
0 голосов
разбираться. у тебя одна функция есть в двух объектниках. Причем - не какая-попало, а main!
12 года назад от 3,14
0 голосов
Причина, указанная Андрем Котоусовым, возможна, но маловероятна. Те, кто линкует в свой экзешник множество библиотек, не задают таких вопросов. Тем боле что в современных библиотеках используются namespace'ы, так что столкновения имен обычно не происходит.
 
А ВЕРОЯТНАЯ причина вот какая. Вы поместили определение функции (подчеркиваю, именно определение, то есть ТЕЛО функции, а не е декларацию) в *. h файл. Если этому файлу сделан #include только в ОДИН *. cpp файл, то линковка пройдет и линковщик ни на что не пожалуется. Но если этому файлу сделан #include в два или боле *. cpp файлов, то после компиляции в каждом из них возникнет та же самая функция. Линковщик выругается, что видит больше одной функции с одним и тем же прототипом. Решения у этой проблемы два: или перенести тело функции в *. cpp файл, оставив в *. h файле только декларацию (прототип) , или оставить функцию на месте, но объявить е inline.
 
Тот же самый эффект может получиться не только с функциями, но и с другими объектами. Скажем, для статических членов класса нужно давать определение в *. ср файле, за пределами определения класса. Но если вы поместите это определение в *. h файл, а затем сделаете этому файлу #include в два или боле *. cpp файлов, то линковщик выругается, что он видит несколько определений одного и того же символа.
 
Кстати, Михаил Левин неправ: чтобы получить такую жалобу от линковщика, совершенно не обязательно сдублировать определение ИМЕННО фунции main. Любая функция проканает.
12 года назад от *МаРиЯ*Ms.HUMOUR %)

Связанные вопросы

1 ответ
3 года назад от MichaelaAspi