Следующая структура кода:
ArrayStack.h
ArrayStack.cpp
Array.h
Array.cpp
main.cpp
генерирует эти ошибки:
LNK1169 найдено один или несколько найденных символов с несколькими значениями
LNK2005 _main уже определен в Array.obj
В чем проблема? Обратите внимание, что Array.cpp имел int main() , определенный сам по себе, когда он был впервые включен в проект, но больше не имеет его (ни ArrayStack.cpp ). Кроме того, код компилируется просто отлично, когда int main() в main.cpp опущен.
c++ visual-studio linker-errors
1 ответ
2 Решение TobiMcNamobi [2015-12-04 11:28:00]
Сообщение об ошибке означает, что во всех скомпилированных кодах, *.obj файлах, компоновщик находит более одной функции main() . Очевидно, что один из них находится в main.cpp.
Первое решение, которое приходит на ум, как упоминалось в комментариях, состоит в том, чтобы (принудительно) перекомпилировать, как-то удаляя файлы *.obj.
Добрый день, первый раз столкнулся с такой проблемой. При компиляции вылазит следующее для каждого метода:
Собственно сам код:
head.h
head.cpp
main.cpp
1 ответ 1
Включайте через #include заголовочный файл с объявлениями, но не с определениями. Так, как сделали вы, у вас масса определенных (не объявленных, а именно определенных) функций оказывается скомпилированной как в файле head.obj , так и в main.obj , и компоновщик не знает, какой из вариантов выбрать.
Всё ещё ищете ответ? Посмотрите другие вопросы с метками c++ методы компоновщик или задайте свой вопрос.
Похожие
Для подписки на ленту скопируйте и вставьте эту ссылку в вашу программу для чтения RSS.
дизайн сайта / логотип © 2019 Stack Exchange Inc; пользовательское содержимое попадает под действие лицензии cc by-sa 4.0 с указанием ссылки на источник. rev 2019.11.15.35459
я в настоящее время застрял на проблему. Он просит, чтобы напечатать ежемесячные продажи для какой-то штукой управления запасами магазина, а затем попросить пользователя ввести число от 1-12, чтобы увидеть в общей сложности в течение определенного месяца.
Я должен предоставить вам, что у меня есть, так как я сделал это в Visual Studio (создан пустой/пустой проект, так что не было ни одного файла «stdafx.h» Должен ли он быть там.?):
И это то, что я до сих пор для main.cpp. Это не полный на данный момент, но я просто хочу убедиться, что я на правильном пути:
Так что я до сих пор должны printMonthlySales для storeMonhtlySales за месяц 1 (январь). «Натянуть» и «CIN >> А» были только там, чтобы предотвратить окно терминала от закрытия автоматически (опять же, я делаю это в Visual Studio).
Тем не менее, я компиляция этих и я получаю две ошибки:
Я озадачен, почему они говорят, что printMonthlySales является «уже определен», так как я не вижу ничего плохого здесь. Просматривая файлы Sales.obj и main.obj ничего не сделал.
2 ответа
Возможно, для Вашего проекта будут необходимы бесплатные векторные карты. На нашем сайте представлены карты для всех стран.
Когда вы включаете файл, он эффективно копировать и вставлять в том числе файл. Все в заголовке теперь часть из файла компилируется. #pragma once , и другие формы включают защитные ограждения предотвратить файл от включения более чем один раз в единица перевода.
единицы перевода составляются отдельно, так что нет никакой преемственности между ними. Там нет никакого способа для B.cpp знать, что a.cpp уже включил данный заголовок. На самом деле, думать о том, как все плохо было бы, если только один файл в большом проекте может #include . C++ был бы отброшен, как пустая трата времени, прежде чем он даже вышел из офиса и в коридоре в Bell Labs.
Так. a.cpp и B.cpp оба включают header.h. Они оба имеют свою собственную копию всего в header.h. Оба скомпилирован просто отлично, но компоновщик не имеет представления о том, что делать с конкурирующими определениями.
extern это обещание, что где-то storeMonthlySales будет определяться так, что компилятор может продолжать делать свою работу. Если он не определен, компоновщик будет жаловаться.
это определение. Он существует только в Sales.cpp. Он может использоваться любой файл, который включает в себя Sales.h
Кстати, следить за using namespace std; . Это заставит вас проблему.