У меня нет базовых знаний о программировании, единственный опыт, который у меня есть, - это немного html-кодирования в школе. Я буквально два дня назад начал изучать C++, а сейчас изучаю потоки ввода и вывода, даже не разбираясь в отладке. Я начал проект Visual Studio и написал вторую программу, simple hello world, как и в первой. Но на этот раз произошла ошибка, _main уже определен в .obj первой программы. Что это значит, в чем проблема, как мне противостоять и продолжать работать? Ошибка LNK2005 _main Я посмотрел код ошибки и ничего не понял, не говоря уже о том, как это исправить. Пожалуйста, легких ответов. заранее спасибо
Программа:
#include "pch.h"
#include <iostream>
using namespace std;
int main() {
cout << "Hello World2" << endl;
return 0;
}
FWIW, я думаю, что лучше изучать программирование на C++ с помощью g ++ / clang. Visual Studio отлично подходит для редактирования и отладки, но требует более сложного обучения.
Вам следует избегать предварительно скомпилированные заголовки, пока ваши программы не станут большими и не гарантируют экономии. В противном случае это создаст для вас много проблем.
@ThomasMatthews, но мне ведь нужны предварительно скомпилированные заголовки для выполнения программ, не так ли?
@RSahu Мой друг тоже порекомендовал, учился с компилятором, и я пробовал, но понял меньше с точки зрения использования, чем при работе с Visual Studio. Я знаю, что это немного нетрадиционное обучение, но я готов пойти по этому пути, если со временем это сработает.
Нет, вам не нужно использовать предварительно скомпилированные заголовки. Я программирую на C и C++ много десятилетий и не использую предварительно скомпилированные заголовки. Одна повторяющаяся проблема, с которой я столкнулся, заключалась в том, что файлы заголовков постоянно менялись, поэтому компилятор всегда перестраивал (перекомпилировал) предварительно скомпилированный заголовок. Так что в этом случае никакой пользы не было. Кроме того, предварительно скомпилированные заголовки полезны, когда у вас есть огромный исходный код (например, включая Windows и и другие большие библиотеки, такие как WxWidgets).
@ThomasMatthews Вы имеете в виду заголовки вроде pch.h, верно? Но iostream - это тоже заголовок или он отличается от iostream?
Экономия времени на сборку небольших программ с предварительно скомпилированными заголовками незначительна. Сборка может занять много времени в зависимости от других программ, запущенных на вашем компьютере (например, музыки, видео и т. д.).
pch.h
- это предварительно скомпилированный заголовок, состоящий из всех ваших заголовков. Это нестандартно (некоторые компиляторы используют stdafx.h
). iostream
- это стандартный заголовок. Примечание: стандартные заголовки могут не существовать как отдельные файлы, но могут быть встроены в компилятор.
@ThomasMatthews Но для чего используется pch.h?
Если у меня есть один или несколько файлов заголовков, компилятор скомпилирует данные из файлов заголовков в pch.h
. Считайте pch.h
сжатым файлом, содержащим один или несколько включаемых файлов. Предварительная компиляция заголовка означает, что компилятору не нужно анализировать текст включаемого файла; он может ссылаться непосредственно на данные в файле pch.h
. Поищите в Интернете "предварительно скомпилированный заголовок C++". Попробуйте удалить оператор include pch.h
и любые параметры компилятора для предварительно скомпилированных заголовков и перестройте свою программу.
Понятно, спасибо за объяснение!
Если в вашем проекте Visual Studio есть два файла (.cpp), каждый из которых содержит функцию main
или _tmain
, ссылка не удастся, поскольку может быть определена только одна функция main
.
Переименуйте все остальные функции main
, и все будет в порядке.
Я попытался назвать вторую главную "main (1)", но это не было принято. Стоит ли мне называть его по-другому, и это повлияет на программу?
Назовите его main_1 (), и вы будете готовы изучать и экспериментировать с C++.
Так что теперь я просто назову его main_1 (), main_2 () в следующем файле и так далее? Спасибо за совет!
Но я не могу снова использовать тот же main_1 () в том же файле, верно?
Я добавил функцию cout в программу, изображенную выше, нельзя ли использовать другой процесс в том же файле?
Создайте новый проект, вставьте свой код в новый файл и проверьте. Выполнение программы начинается с метода main () на каждом языке программирования, поэтому в одной программе не может быть более одного метода main (). "Ошибка LNK2005 _main" возникает, когда вы определяете более одного метода main ().
Что на самом деле означает определение и как оно выполняется? Я все еще не понимал этого
Вам нужно создать один проект на одну главную.