В Java у каждого класса может быть свой собственный основной метод, но когда я попытался создать два файла cpp в C++, оба с их собственными основными методами, компилятор сказал мне, что основная часть уже определена. Означает ли это, что мне нужен новый проект для каждого основного метода? Я следую учебному курсу C++, и я не хочу создавать новый проект для каждой примерной программы, которую мы делаем, мне просто нужен один проект с несколькими основными методами. Это возможно?
У вашего .cpp
нет "методов", возможно, что вы определили свободные функции (т.е. процедуры, не связанные с каким-либо классом), и все они находятся в одном и том же пространстве имен. Это, конечно, дает ошибки на этапе связывания, так как вы многократно определяете одно и то же.
Если вы хотите определить класс, вы можете использовать ключевое слово class
; конечно, в этом случае, как и в Java, каждый класс, который вы определяете, может иметь свой собственный main
метод.
Я следую учебному курсу C++, и я не хочу создавать новый проект для каждой примерной программы, которую мы делаем, мне просто нужен один проект с несколькими основными методами. Это возможно?
Нет. Точка входа - это всего лишь одна глобальная main
функция. Если вы хотите разрешить несколько возможных "подпрограмм", напишите каждый из них в отдельной функции и решите, какой из них вызывать из одного main
.
В C#
каждый проект имеет свой собственный файл Program.cs
, который является точкой входа. Если вы объединяете несколько проектов, тривиально, чтобы сообщить Visual Studio о компиляции в виде библиотеки и выбрать, какую точку входа в проект использовать.
В C++
вы можете иметь только одно определение main
в глобальном пространстве имен. Например, у вас есть свой собственный основной объект в пространстве имен, который ::main
вызовет. Этот метод выполняется в SDL, например, так что пользователю не нужно создавать main
, и он может связывать -lSDL_main
.
В MS Visual Studio одно "решение" (файл.sln) будет содержать несколько "проектов". Каждый исполняемый файл, который вы хотите создать, будет иметь свой собственный "проект", и вы можете иметь много таких проектов в одном и том же "решении". Не каждый "проект" должен создавать исполняемый файл, хотя часто "проект" просто создает библиотеку, например библиотеку общих утилит, которую могут включать многие ваши исполняемые файлы. Когда вы помещаете два проекта "main()" в два.cpp файла в одном проекте, компилятор должен скомпилировать оба файла.cpp в.obj файлы, а затем, вероятно, попытался создать один исполняемый файл с обоими.obj файлами, связанными с исполняемый файл. И вы получите сообщение об ошибке, когда компоновщик попытается поместить обе функции "main()" в один и тот же исполняемый файл, так как вы не можете иметь две точки входа с тем же именем.
То, что говорит Маттео о классах и методах, тоже нужно понять.
main
функция, на которую вы ссылаетесь (т.е. точка входа в исполняемый файл), не находится в классе. Это бесплатная функция, объявленная в глобальном пространстве имен. У вас может быть столько классов, сколько вы хотите, с функциями, называемыми main
, и они будут совершенно не связаны друг с другом и не связаны с функцией точки входа main
. Я думаю, что вы сбиты с толку, потому что вы пришли с Java. В C ++ вам не нужно иметь класс, чтобы иметь функцию.
main()
для каждого исполняемого файла. Вот и все.