main уже определен в source obj

Следующая структура кода:

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; . Это заставит вас проблему.

Оцените статью
SoftLast
Добавить комментарий