------Построение начато: проект: юка, Конфигурация: Debug Win32 ------
ver_tel_kruskal.obj : error LNK2005: _main уже определен в djk.obj
C:\Users\Александр\Documents\Visual Studio 2010\Projects\юка\Debug\юка. exe : fatal error LNK1169: обнаружен многократно определенный символ - один или более
========== Построение: успешно: 0, с ошибками: 1, без изменений: 0, пропущено: 0 ==========
Что с этим делать?
Техника
Программа в с++ выдаёт: ошибку обнаружен многократно определенный символ - один или более
Причина, указанная Андреем Котоусовым, возможна, но маловероятна. Те, кто линкует в свой экзешник множество библиотек, не задают таких вопросов. Тем более что в современных библиотеках используются namespace'ы, так что столкновения имен обычно не происходит.
А ВЕРОЯТНАЯ причина вот какая. Вы поместили определение функции (подчеркиваю, именно определение, то есть ТЕЛО функции, а не ее декларацию) в *.h файл. Если этому файлу сделан #include только в ОДИН *.cpp файл, то линковка пройдет и линковщик ни на что не пожалуется. Но если этому файлу сделан #include в два или более *.cpp файлов, то после компиляции в каждом из них возникнет та же самая функция. Линковщик выругается, что видит больше одной функции с одним и тем же прототипом. Решения у этой проблемы два: или перенести тело функции в *.cpp файл, оставив в *.h файле только декларацию (прототип) , или оставить функцию на месте, но объявить ее inline.
Тот же самый эффект может получиться не только с функциями, но и с другими объектами. Скажем, для статических членов класса нужно давать определение в *.срр файле, за пределами определения класса. Но если вы поместите это определение в *.h файл, а затем сделаете этому файлу #include в два или более *.cpp файлов, то линковщик выругается, что он видит несколько определений одного и того же символа.
Кстати, Михаил Левин неправ: чтобы получить такую жалобу от линковщика, совершенно не обязательно сдублировать определение ИМЕННО фунции main. Любая функция проканает.
А ВЕРОЯТНАЯ причина вот какая. Вы поместили определение функции (подчеркиваю, именно определение, то есть ТЕЛО функции, а не ее декларацию) в *.h файл. Если этому файлу сделан #include только в ОДИН *.cpp файл, то линковка пройдет и линковщик ни на что не пожалуется. Но если этому файлу сделан #include в два или более *.cpp файлов, то после компиляции в каждом из них возникнет та же самая функция. Линковщик выругается, что видит больше одной функции с одним и тем же прототипом. Решения у этой проблемы два: или перенести тело функции в *.cpp файл, оставив в *.h файле только декларацию (прототип) , или оставить функцию на месте, но объявить ее inline.
Тот же самый эффект может получиться не только с функциями, но и с другими объектами. Скажем, для статических членов класса нужно давать определение в *.срр файле, за пределами определения класса. Но если вы поместите это определение в *.h файл, а затем сделаете этому файлу #include в два или более *.cpp файлов, то линковщик выругается, что он видит несколько определений одного и того же символа.
Кстати, Михаил Левин неправ: чтобы получить такую жалобу от линковщика, совершенно не обязательно сдублировать определение ИМЕННО фунции main. Любая функция проканает.
разбираться. у тебя одна функция есть в двух объектниках. Причем - не какая-попало, а main!
Проверить список LIB файлов, которые задействованы в компановке (линковании) . Например, добавили две библиотеки в которых определена одна и та же функция. Линкер в растерянности, какую функцию брать.
Убрал из #include "file.h", в определенном месте определенный хедер (описание класса окна) и всё, правда, после этого пришлось часть кода переделывать ))
Похожие вопросы
- Мастера по ремонту техники помогите! Музыкальный центр "panasonic sa ak50", выдает ошибку на дисплее F61.
- Стиральная машинка Samsung WF-F1062 выдает ошибку H1.
- Камера Sony выдает ошибку C:21:00 - конденсат. Камеру не мочил. что делать?
- стиральная машина Аристон выдаёт ошибку F-05, не сливает воду.
- настеный газовый котел бакси выдает ошибку R02 что это значит
- Колонки перестали выдавать определенные частоты,
- Решил побаловаться с UPC (источником песперебойного питания) , и обнаружил что на выходе он выдаёт 160-170 v ...
- Нужен ли и софт, в электронике, если нужно только определенную последовательность кода выдавать на выходе?
- Математическое ожидание выпадения карты определённой масти
- Какой аккумулятор может выдавать большой ток?